تبدیل میکروکنترلر AVR به آردوینو:
چطور از کد هگز برنامه آردیونو توی میکروکنترلر برد خودمون استفاده کنیم:
همانطور که میدانید، آردوینو یک پلتفرم سختافزاری و نرمافزاری متنباز است. منظور از متنباز بودن این پلتفرم، این است که تمام اطلاعات مرتبط با سختافزار و نرمافزار آردوینو بهصورت رایگان در دسترس عموم است و هر کسی میتواند از آنها استفاده کند یا در صورت نیاز، آنها را بر اساس نیاز خود تغییر دهد.
آردوینو:
پلتفرم آردوینو شامل یک میکروکنترلر تکبردی متنباز است که بخش سختافزاری آردوینو را تشکیل میدهد. همچنین، این پلتفرم شامل نرمافزار آردوینو IDE برای برنامهنویسی بردهای آردوینو و یک بوتلودر نرمافزاری است که بر روی میکروکنترلر بارگذاری میشود. هدف اصلی این پلتفرم، تسهیل و تسریع تولید پروژههای سختافزاری تعاملی و ساخت وسایلی است که با محیط تعامل داشته باشند. میکروکنترلر مورد استفاده در بردهای آردوینو بر اساس زبان برنامهنویسی آردوینو و محیط کدنویسی ویژه آن برنامهریزی میشود و برای کدنویسی نیازی به نرمافزار یا کامپایلر جانبی دیگری نیست.
از مزایای آردوینو میتوان به موارد زیر اشاره کرد:
-
سادگی محیط کاربری نرمافزار
-
پشتیبانی از کلیه سیستمعاملها
-
برنامهنویسی بسیار آسان توسط کتابخانههای طراحیشده
-
وجود کتابخانههای آماده برای کار با ماژولهای GSM، Ethernet، WiFi و انواع موتورها
-
قابلیت ارتباط آنلاین با پورت سریال و مشاهده عملکرد برنامه
-
آماده به کار بودن
-
وجود مثالهای کاربردی فراوان برای کدنویسی
-
پشتیبانی فنی و علمی
-
عدم نیاز به پروگرامر جانبی
یکی از محبوبترین بردهای Arduino که بهطور گسترده مورد استفاده قرار میگیرد، آردوینو Uno است. این برد، گرچه اولین برد آردوینو نبود، اما همچنان فعالترین و پرکاربردترین برد در بازار بهشمار میرود. محبوبیت فراوان Arduino Uno باعث شده است که منابع آموزشی و پروژههای بسیار زیادی برای آن در سراسر وب در دسترس باشد، که میتواند در آغاز کار به شما کمک کند. این برد به دلیل ویژگیهای عالی و سهولت استفاده، محبوبیت زیادی دارد.
میکروکنترلر AVR:
خانواده میکروکنترلرهای AVR شامل طیف گستردهای از آیسیها است که از ۸ پین شروع و به ۶۴ پین ختم میشود. با این حال، برخی از مدلهای آن مانند ATMEGA32 کاربرد عمومیتری دارند و در طراحی و اجرای بسیاری از پروژهها از آن استفاده شده است.
نسل جدید AVRها به امکاناتی مانند تایمر واچداگ، دتکتور شکست ولتاژ (Brown-out Detector)، مبدلهای آنالوگ به دیجیتال (ADC) و خروجیهای PWM مجهز هستند. یکی از ویژگیهای مهم که در اکثر میکروکنترلرها مشاهده نمیشود، مقایسهکننده آنالوگ با گینهای ۱، ۱۰ و ۲۰۰ است که بسته به نوع میکروکنترلر متفاوت است.
مهمترین مشخصات این میکروکنترلر عبارتند از:
-
کارایی بالا و توان مصرفی کم
-
سرعت تا سقف ۱۶ میلیون دستور در ثانیه در فرکانس ۱۶ مگاهرتز
-
۳۲ کیلوبایت حافظه FLASH داخلی قابل برنامهریزی با قابلیت ده هزار بار نوشتن و پاک کردن
-
۲ کیلوبایت حافظه داخلی SRAM
-
۱۰۲۴ بایت حافظه EEPROM داخلی قابل برنامهریزی با قابلیت صد هزار بار نوشتن و خواندن
-
قابلیت ارتباط JTAG
-
دو تایمر/شمارنده هشت بیتی
-
یک تایمر/شمارنده شانزده بیتی
-
چهار کانال PWM
-
هشت کانال مبدل A/D ده بیتی
-
مقایسهکننده آنالوگ داخلی
-
واچداگ قابل برنامهریزی با اسیلاتور داخلی
-
ارتباط سریال برای برنامهریزی ISP
-
USART سریال قابل برنامهریزی
-
شش حالت SLEEP
-
منابع وقفه داخلی و خارجی
-
اسیلاتور داخلی RC
-
ولتاژ کاری ۴.۵ تا ۵.۵ ولت
-
فرکانس کاری ۰ تا ۱۶ مگاهرتز
-
۳۲ خط داده ورودی و خروجی قابل برنامهریزی
تفاوتها و شباهتهای AVR و آردوینو:
بردهای آردوینو و میکروکنترلرهای AVR هر دو ابزارهایی قدرتمند و پرکاربرد در دنیای الکترونیک هستند که به توسعهدهندگان و علاقهمندان امکان ساخت پروژههای مختلف را میدهند. با این حال، هر کدام دارای ویژگیها و کاربردهای خاص خود هستند که در ادامه به بررسی تفاوتها و شباهتهای اصلی آنها میپردازیم.
شباهتهای بین میکروکنترلر AVR و ARDUINO:
-
ساختار میکروکنترلری: بسیاری از بردهای آردوینو از میکروکنترلرهای AVR به عنوان هسته اصلی استفاده میکنند. به عنوان مثال، آردوینو Uno بر پایه ATmega328 است که یک میکروکنترلر محبوب در خانواده AVR محسوب میشود.
-
پلتفرم متنباز: هر دو پلتفرم AVR و آردوینو از نظر نرمافزاری و سختافزاری متنباز هستند، به این معنا که کاربران میتوانند به کدها و نقشههای سختافزاری دسترسی داشته باشند و آنها را متناسب با نیازهای خود تغییر دهند.
-
قابلیت برنامهنویسی آسان: هر دو پلتفرم از ابزارهایی بهره میبرند که برنامهنویسی آنها را برای کاربران ساده میکند. برای آردوینو، نرمافزار Arduino IDE و کتابخانههای آماده موجود برنامهنویسی را به شدت تسهیل کردهاند، در حالی که AVR نیز ابزارهایی همچون AVR Studio و AVR GCC برای برنامهنویسی در اختیار کاربران قرار میدهد.
تفاوتهای بین میکروکنترلر AVR و ARDUINO:
-
بوت لودر و پروگرامینگ: در میکروکنترلرهای خام AVR، برنامهنویسی تنها از طریق پورتهای ISP (In-System Programming) انجام میشود و نیاز به پروگرامر جداگانه دارد. اما در بردهای آردوینو به کمک بوت لودر مخصوص، این کار با یک کابل USB ساده امکانپذیر شده است که فرآیند پروگرام کردن را بسیار راحتتر میکند.
-
سختافزار مجتمع شده: آردوینو علاوه بر میکروکنترلر AVR، شامل اجزای دیگری همچون رگولاتور ولتاژ، پورت USB و دیگر قطعات برای افزایش راحتی و انعطافپذیری است، در حالی که AVR تنها شامل میکروکنترلر خام میباشد و برای استفاده نیاز به مدارهای جانبی دارد.
- کتابخانهها و پشتیبانی از ماژولها: آردوینو به لطف جامعه گسترده کاربران و توسعهدهندگان، کتابخانهها و مثالهای فراوانی برای انواع ماژولها مانند سنسورها، موتورها و ارتباطات بیسیم ارائه میدهد که کدنویسی را سریع و ساده میکند. در مقابل، برنامهنویسی AVR مستقیماً با کدهای سطح پایین انجام میشود که نیازمند دانش بیشتری در زمینه الکترونیک و برنامهنویسی است.
-
کاربرد و مخاطب هدف: بردهای آردوینو به دلیل سادگی کار و ابزارهای آماده، بیشتر مورد توجه علاقهمندان و مبتدیانی است که به دنبال یادگیری و توسعه پروژههای ابتدایی و میانرده هستند. در مقابل، AVR به دلیل انعطاف بیشتر و دسترسی مستقیم به پینها و رجیسترها، بیشتر برای پروژههای حرفهای و کاربردهایی که نیاز به کنترل دقیق دارند، به کار میرود.
در نهایت، میتوان گفت که آردوینو گزینهای ایدهآل برای شروع سریع پروژهها و آموزش مقدماتی الکترونیک است، در حالی که AVR انتخابی مناسب برای پروژههای حرفهایتر و کنترل دقیقتر به شمار میرود.
با این توضیحات این سوال مطرح میشود که چطور میتوانیم مزایای این دو را در کنار هم داشته باشیم؟
انتخاب میکروکنترلر AVR مناسب:
به طور کلی، میکروکنترلرهای AVR به ۵ گروه زیر تقسیم میشوند که هر کدام توسط یک هسته مخصوص در Arduino IDE پشتیبانی میشوند:
-
MightyCore: شامل میکروکنترلرهای ATmega8535، ATmega16، ATmega32، ATmega164، ATmega324، ATmega644 و ATmega1284 که همگی از بوت لودر Optiboot بهره میبرند. این هسته با بسیاری از کتابخانههای آردوینو UNO سازگار است و انتقال کتابخانههای دیگر به این هسته نیز به سادگی انجام میشود.
-
MegaCore: برای میکروکنترلرهای بزرگتر AVR مانند ATmega128، ATmega64 و ATmega162 طراحی شده است.
-
MiniCore: شامل میکروکنترلرهای کوچکتر AVR مانند ATmega8، ATmega48، ATmega88، ATmega168 و ATmega328 است که در پروژههای ساده و کوچک استفاده میشوند.
-
MicroCore: مناسب برای میکروکنترلرهای بسیار کوچک و ارزانقیمت مانند ATtiny13 و ATtiny25، که بیشتر در پروژههای کوچک و اینترنت اشیا به کار میروند.
-
MegaCoreX: برای میکروکنترلرهای پیشرفتهتر AVR مانند ATmega4809، ATmega3208 و ATmega4808 طراحی شده که از امکانات جدیدتری بهره میبرند.
بسیاری از کتابخانههای آردوینو با MightyCore نیز سازگار هستند، بهگونهای که کاربران میتوانند از کدهای موجود و کتابخانههای آماده برای میکروکنترلرهای AVR استفاده کنند. این قابلیت موجب میشود که MightyCore گزینهای مناسب برای افرادی باشد که میخواهند از امکانات آردوینو در میکروکنترلرهای AVR بهرهمند شوند. برای استفاده از این هسته، حداقل نسخه 1.6 از Arduino IDE لازم است، اما توصیه میشود از نسخه 1.8.7 یا بالاتر استفاده کنید.
در تصویر زیر، محیط برنامه Arduino IDE را مشاهده میکنید.
میکروکنترلرهای پشتیبانی شده:
میکروکنترلرهای زیر توسط هسته MightyCore در Arduino IDE پشتیبانی میشوند:
-
ATmega1284
-
ATmega644
-
ATmega324
-
ATmega164
-
ATmega32
-
ATmega16
-
ATmega8535
* همه انواع این میکروکنترلرها شامل سریهای P، PA، A و PB نیز پشتیبانی میشوند.
در صورتی که در انتخاب میکروکنترلر مورد نظر خود مشکل دارید، میتوانید از جدول زیر برای مقایسه ویژگیها و انتخاب مناسبترین میکروکنترلر کمک بگیرید.
|
mega1284 |
mega644 |
mega324 |
mega164 |
mega32 |
mega16 |
mega8535 |
Flash |
128kiB |
64kiB |
32kiB |
16kiB |
32kiB |
16kiB |
8kiB |
RAM |
16kiB |
4kiB |
2kiB |
1kiB |
2kiB |
1kiB |
0.5kiB |
EEPROM |
4kiB |
2kiB |
1kiB |
0.5kiB |
0.5kiB |
0.5kiB |
0.5kiB |
Serial ports |
2 |
2 |
2/3* |
2 |
1 |
1 |
1 |
PWM pins |
8 |
6 |
6/9* |
6 |
4 |
4 |
4 |
IO pins |
32 |
32 |
32/39* |
32 |
32 |
32 |
32 |
* ATmega324PB: در صورت استفاده از نوسانگر داخلی، این میکروکنترلر دارای 3 پورت سریال، 9 پایه PWM و 39 پین I/O است.
هسته MightyCore از بوتلودر Optiboot Flash استفاده میکند، بوتلودری که از قابلیت نوشتن در حافظه فلش در حین اجرای برنامه پشتیبانی میکند. این ویژگی به این معناست که میتوان دادههای حسگر را مستقیماً در حافظه فلش ذخیره کرد، بدون نیاز به حافظه خارجی. حافظه فلش از سرعت بیشتری نسبت به EEPROM برخوردار است و میتواند تا حداقل 10000 بار عملیات نوشتن را قبل از فرسوده شدن مدیریت کند.
مقایسه پروگرام کردن AVR و آردوینو:
برای پروگرام کردن تقریباً تمام میکروکنترلرهای AVR از پروگرامر ISP استفاده میشود که شامل 6 پین است. ISP یک استاندارد برای پروگرام کردن میکروکنترلرهای AVR است. این پینها عبارتند از:
Pins in Arduino UNO |
Micro Pins ISP |
Programmer Pins |
NUMBER |
PIN12 |
MISO |
MISO |
1 |
VCC |
VCC |
VCC 5V |
2 |
PIN 13 |
SCK |
SCK |
3 |
PIN 11 |
MOSI |
MOSI |
4 |
RES |
RESET |
RESET |
5 |
GND |
GND |
GND |
6 |
اما بردهای آردوینو تنها از طریق 2 پین قابل پروگرام شدن هستند. اینجاست که مفهوم بوتلودر برای آردوینو اهمیت پیدا میکند. میکروکنترلرهای خام قابلیت برنامهریزی و پروگرام توسط مبدلهای USB به TTL را ندارند. بنابراین، قبل از استفاده از آنها باید برنامهای به نام Bootloader بر روی آنها ذخیره شود تا بتوانند از طریق مبدلهای USB به TTL پروگرام شوند.
پس از نصب بوتلودر روی میکروکنترلر، میتوانید از طریق نرمافزار Arduino IDE برنامه مورد نظر خود را روی آن آپلود کنید. برنامهای که قرار است روی میکروکنترلر پروگرام شود، ابتدا از طریق پورت سریال و توسط دو پین RX و TX توسط بوتلودر دریافت و سپس در حافظه فلش ذخیره میشود. به این صورت که پس از دریافت برنامه از USB، اطلاعات به سریال تبدیل و به میکروکنترلر منتقل میشود.
برنامه بوتلودر آردوینو دو وظیفه اصلی روی میکروکنترلر انجام میدهد:
- پروگرام کردن برنامه بوتلودر در میکروکنترلر
- تنظیم فیوزبیتهای مخصوص آردوینو روی میکروکنترلر
نصب mightycore بر روی نرم افزار آردوینو:
روش اول:
این روش نصب به Arduino IDE نسخه 1.6.4 یا بالاتر نیاز دارد.
برای نصب mightycore به روش اول به صورت زیر عمل کنید:
Arduino IDE را باز کنید.
آیتم منوی File > Preferences را باز کنید.
URL زیر را در URL های Additional Boards Manager URLs وارد کنید :
https://mcudude.github.io/MightyCore/package_MCUdude_MightyCore_index.json
اگر بیش از یک URL دارید ، با استفاده از کاما ( , ) آنها را از هم جدا کنید
آیتم منوی Tools > Board > Boards Manager… را باز کنید.
منتظر بمانید تا بارگیری فهرست های پلتفرم به پایان برسد.
به پایین اسکرول کنید تا ورودی MightyCore را ببینید و روی آن کلیک کنید.
روی Install کلیک کنید .
پس از اتمام نصب، پنجره Boards Manager را ببندید.
روش دوم نصب دستی:
بر روی دکمه “دانلود ZIP” کلیک کنید. فایل ZIP را استخراج کنید و پوشه استخراج شده را به محل ” ~/Documents/Arduino/hardware ” منتقل کنید. اگر پوشه “hardware” وجود ندارد، آن را ایجاد کنید.
Arduino IDE را باز کنید و یک دسته جدید در منوی بردها به نام “MightyCore” ظاهر می شود.
ATmega324PB
اگر قصد دارید از ATmega324PB استفاده کنید، به آخرین نسخه زنجیره ابزار آردوینو نیاز خواهید داشت. این زنجیره ابزار از طریق نسخه 1.8.6 یا جدیدتر از Arduino IDE در دسترس است. در ادامه نحوه نصب و فعالسازی زنجیره ابزار توضیح داده شده است:
- از منوی Tools > Board > Boards Manager… وارد بخش Boards Manager شوید.
- صبر کنید تا بارگیری فهرست پلتفرمها به پایان برسد.
- در لیست پلتفرمها، به قسمت بالایی با عنوان Arduino AVR Boards بروید و روی این گزینه کلیک کنید.
- اطمینان حاصل کنید که آخرین نسخه نصب و انتخاب شده است.
- در نهایت، پنجره Boards Manager را ببندید.
شروع کار با MightyCore:
اکنون که MightyCore را دانلود و نصب کردهاید، چگونه میتوانید کار را شروع کنید؟ در ادامه یک راهنمای سریع برای شروع آورده شده است:
ابتدا میکروکنترلر خود را با استفاده از نمودار pinout مناسب وصل کنید.
این هسته سه گزینه مختلف pinout را ارائه میدهد:
-
استاندارد: این پینآوت پیشفرض است و بر اساس پینآوت اصلی AVR طراحی شده است.
-
Bobuino: این گزینه برای تنظیم پینآوت به سبک آردوینو UNO استفاده میشود. این نسخه از پینآوت برای استفاده با شیلدها یا کدهایی که برای آردوینو UNO نوشته شدهاند، عالی است زیرا عملکرد پینها ثابت میماند. پینهای MOSI، MISO و SCK به ترتیب در پینهای D11، D12 و D13 قرار دارند.
-
Sanguino: این پینآوت در کنترلرهای چاپگر سهبعدی قدیمی مانند Sanguino، RepRap Sanguinololu و RepRap Gen7 رایج است. این پینآوت همچنین با نام «avr_developers» نیز شناخته میشود.
برای بزرگنمایی نمودار پینآوت، میتوانید روی آن کلیک کنید.
پین اوت استاندارد MightyCore |
پین اوت MightyCore Bobuino |
پین اوت MightyCore Sanguino |
اگر قصد ندارید از بوتلودر استفاده کنید (آپلود کد با استفاده از آداپتور USB به سریال)، میتوانید هدر FTDI و خازن 100 نانوفاراد روی پین ریست را حذف کنید.
-
از منوی Tools > Board، یک میکروکنترلر سازگار با MightyCore را انتخاب کنید.
-
اگر گزینه BOD (Brown-out Detection) موجود باشد، میتوانید تعیین کنید که میکروکنترلر در چه ولتاژی خاموش شود.
-
پینآوت دلخواه خود را انتخاب کنید. شخصاً پینآوت استاندارد را پیشنهاد میکنم زیرا راحتتر است، اما پینآوت Bobuino برای سازگاری با Arduino UNO بهتر عمل میکند.
-
فرکانس کلاک مورد نظر خود را انتخاب کنید. 16 مگاهرتز در اکثر بردهای آردوینو بهصورت استاندارد استفاده میشود.
-
در منوی Programmer، نوع پروگرامری را که استفاده میکنید، انتخاب کنید.
-
اگر گزینه Variants موجود بود، باید نوع نسخه میکروکنترلر را مشخص کنید. به عنوان مثال، ATmega1284 و ATmega1284P نسخههای مختلفی دارند و انتخاب نادرست ممکن است باعث ایجاد خطا شود.
-
گزینه Burn Bootloader را انتخاب کنید. اگر یک LED به پین PB0 متصل باشد، باید دو بار در هر ثانیه چشمک بزند.
اکنون که تنظیمات فیوز بهدرستی انجام شده و بوتلودر در میکروکنترلر ریخته شده است، میتوانید کد خود را به دو روش آپلود کنید:
-
آپلود با استفاده از آداپتور USB به سریال: پروگرامر را جدا کرده و آداپتور USB به سریال را به میکروکنترلر متصل کنید، مطابق با مدار تنظیم حداقل. سپس، پورت سریال صحیح را در منوی Tools انتخاب کرده و روی دکمه Upload کلیک کنید. اگر با خطای مهلت زمانی مواجه شدید، احتمالاً پینهای RX و TX شما جابهجا شدهاند یا مدار تنظیم مجدد خودکار بهدرستی کار نمیکند (ممکن است مشکل از خازن 100 نانوفاراد در خط تنظیم مجدد باشد).
-
آپلود با استفاده از پروگرامر: پروگرامر را متصل نگه داشته و در حین کلیک روی Upload، کلید Shift را نگه دارید. این کار بوتلودر را پاک کرده و کد شما را با استفاده از پروگرامر آپلود میکند.
اکنون کد شما باید روی میکروکنترلر اجرا شود.
سایر تنظیمات پروگرامر:
بعد از اتصال پروگرامر، MightyCore نسخههای خود از تمامی پروگرامرهای استاندارد را به منوی Programmer اضافه میکند.
برای کار با ATmega1284، ATmega324A، ATmega324PB، یا ATmega164A، باید نسخه پروگرامر MightyCore که استفاده میکنید را در گزینه Upload Using Programmer انتخاب کنید.
تنظیمات EEPROM:
اگر میخواهید هر بار که بوتلودر را رایت میکنید یا از پروگرامر استفاده میکنید، EEPROM پاک نشود، میتوانید این گزینه را غیرفعال کنید. برای فعال یا غیرفعال کردن گزینه EEPROM Retain، باید پروگرامر ISP را متصل کرده و گزینه Burn bootloader را انتخاب کنید. توجه داشته باشید که هنگام آپلود با استفاده از بوتلودر، EEPROM همیشه حفظ خواهد شد.
فرکانس های کلاک پشتیبانی شده:
MightyCore از فرکانسهای مختلف کلاک پشتیبانی میکند. پس از انتخاب میکروکنترلر در منوی بردها، فرکانس کلاک مورد نظر را انتخاب کنید. برای تنظیم صحیح فیوزها و آپلود بوتلودر مناسب، باید Burn bootloader را انتخاب کنید. مطمئن شوید که پروگرامر ISP متصل است و پروگرامر صحیح را در منوی Programmers انتخاب کردهاید. برای عملیات حساس به زمان، استفاده از کریستال یا نوسانگر خارجی توصیه میشود.
ممکن است هنگام استفاده از نوسانگر داخلی با مشکلاتی در آپلود مواجه شوید. این کالیبرهسازی بهصورت پیشفرض کارخانهای است اما ممکن است با توجه به کالیبراسیون، دمای محیط و ولتاژ کاری کمی متفاوت باشد.اگر هنگام استفاده از نوسانگر داخلی 8 مگاهرتز در آپلود مشکل داشتید، این گزینهها را بررسی کنید:
-
خط Baudrate را در فایل txt ویرایش کرده و یکی از مقادیر 115200، 57600، 38400 یا 19200 را انتخاب کنید.
-
کد را با استفاده از یک پروگرامر (مانند USBasp، USBtinyISP و غیره) آپلود کنید یا با نگه داشتن کلید Shift هنگام کلیک روی دکمه Upload، بوتلودر را نادیده بگیرید.
- بهجای 8 مگاهرتز از گزینههای 4، 2 یا 1 مگاهرتز استفاده کنید.
فرکانس |
نوع اسیلاتور |
سرعت |
اظهار نظر |
16 مگاهرتز |
کریستال/نوسانگر خارجی |
115200 |
ساعت پیش فرض در اکثر بردهای آردوینو مبتنی بر AVR |
20 مگاهرتز |
کریستال/نوسانگر خارجی |
115200 |
|
18.4320 مگاهرتز |
کریستال/نوسانگر خارجی |
115200 |
ساعت عالی برای ارتباط UART بدون خطا |
14.7456 مگاهرتز |
کریستال/نوسانگر خارجی |
115200 |
ساعت عالی برای ارتباط UART بدون خطا |
12 مگاهرتز |
کریستال/نوسانگر خارجی |
57600 |
مفید هنگام کار با USB 1.1 (12 مگابیت بر ثانیه) |
11.0592 مگاهرتز |
کریستال/نوسانگر خارجی |
115200 |
ساعت عالی برای ارتباط UART بدون خطا |
8 مگاهرتز |
کریستال/نوسانگر خارجی |
57600 |
ساعت معمولی هنگام کار با 3.3 ولت |
7.3728 مگاهرتز |
کریستال/نوسانگر خارجی |
115200 |
ساعت عالی برای ارتباط UART بدون خطا |
4 مگاهرتز |
کریستال/نوسانگر خارجی |
9600 |
|
3.6864 مگاهرتز |
کریستال/نوسانگر خارجی |
115200 |
ساعت عالی برای ارتباط UART بدون خطا |
2 مگاهرتز |
کریستال/نوسانگر خارجی |
9600 |
|
1.8432 مگاهرتز |
کریستال/نوسانگر خارجی |
115200 |
ساعت عالی برای ارتباط UART بدون خطا |
1 مگاهرتز |
کریستال/نوسانگر خارجی |
9600 |
|
8 مگاهرتز |
نوسان ساز داخلی |
38400 |
ممکن است باعث مشکلات آپلود UART شود. نظر بالا را ببینید |
4 مگاهرتز |
نوسان ساز داخلی |
9600 |
برگرفته از نوسانگر داخلی 8 مگاهرتز |
2 مگاهرتز |
نوسان ساز داخلی |
9600 |
برگرفته از نوسانگر داخلی 8 مگاهرتز |
1 مگاهرتز |
نوسان ساز داخلی |
9600 |
برگرفته از نوسانگر داخلی 8 مگاهرتز |
گزینه بوتلودر:
MightyCore به شما امکان میدهد که پورت سریال مورد استفاده برای آپلود را انتخاب کنید. بهطور پیشفرض، UART0 به عنوان پورت آپلود تنظیم شده است، اما در میکروکنترلرهای ATmega324/644/1284، امکان استفاده از UART1 برای آپلود نیز وجود دارد. همچنین، اگر برنامه شما نیازی به بوتلودر برای آپلود ندارد، میتوانید با انتخاب گزینه No bootloader، بوتلودر را غیرفعال کنید.
با غیرفعال کردن بوتلودر، 512 بایت حافظه فلش در میکروکنترلرهای ATmega8535/16/32/164/324 و 1024 بایت در میکروکنترلرهای ATmega644/1284 آزاد میشود.
توجه داشته باشید که اگر قصد دارید هر یک از تنظیمات بوتلودر را تغییر دهید، باید پروگرامر را متصل کرده و گزینه Burn bootloader را انتخاب کنید.
گزینه BOD:
تشخیص کاهش ولتاژ (Brown-out Detection یا به اختصار BOD) به میکروکنترلر اجازه میدهد تا ولتاژ ورودی را حس کند و در صورتی که ولتاژ به زیر سطح تعیینشده برسد، میکروکنترلر خاموش شود. برای تغییر تنظیمات BOD، باید پروگرامر را متصل کرده و گزینه Burn bootloader را انتخاب کنید.
جدول زیر گزینههای موجود برای تنظیم BOD را نشان میدهد:
ATmega1284 |
Atmega644 |
ATmega324 |
ATmega164 |
ATmega32 |
ATmega16 |
ATmega8535 |
4.3V |
4.3V |
4.3V |
4.3V |
4.0V |
4.0V |
4.0V |
2.7V |
2.7V |
2.7V |
2.7V |
2.7V |
2.7V |
2.7V |
1.8V |
1.8V |
1.8V |
1.8V |
– |
– |
– |
Disabled |
Disabled |
Disabled |
Disabled |
Disabled |
Disabled |
Disabled |
بهینهسازی زمان پیوند (LTO):
بهینهسازی زمان پیوند (Link Time Optimization یا به اختصار LTO) از نسخه 1.6.11 توسط IDE پشتیبانی میشود. LTO کد را در زمان پیوند بهینهسازی میکند و معمولاً باعث میشود کد بهطور قابلتوجهی کوچکتر شود بدون اینکه عملکرد آن کندتر شود. در Arduino IDE نسخه 1.6.11 و جدیدتر، LTO بهطور پیشفرض فعال است. من این گزینه را بهطور پیشفرض غیرفعال کردهام تا سازگاری هسته با نسخههای قبلی حفظ شود. فعال کردن LTO در IDE 1.6.10 و پایینتر منجر به بروز خطا میشود.
پیشنهاد میکنم گزینه جدید LTO را امتحان کنید و ببینید کد شما چقدر کوچکتر میشود! توجه داشته باشید که برای فعال کردن LTO نیازی به زدن Burn Bootloader ندارید. کافیست این گزینه را از منوی Tools فعال کنید تا کد شما برای کامپایل آماده باشد.
اگر میخواهید درباره پرچمهای LTO و GCC بیشتر بدانید، میتوانید به وبسایت رسمی GNU GCC مراجعه کنید.
برخلاف هستههای رسمی آردوینو، MightyCore از printf بهصورت پیشفرض پشتیبانی میکند. این قابلیت به کلاس Print اضافه شده و با تمام کتابخانههایی که Print را به ارث میبرند کار میکند. Printf یک تابع استاندارد زبان C است که به شما امکان میدهد متن را بسیار سادهتر از استفاده از توابع print و println آردوینو قالببندی کنید.
توجه داشته باشید که اجرای printf برای نمایش اعداد شناور (float) یا دوتایی (double) پشتیبانی نمیشود. اگر به قابلیت چاپ شناور در printf نیاز دارید، باید از PlatformIO استفاده کنید.
اگر از پورت سریال استفاده میکنید، میتوانید از کد زیر استفاده کنید:
1 |
Serial.printf(F("Milliseconds since start: %ld\n"), millis()); |
همانطور که مشاهده میکنید، printf از ماکرو F() پشتیبانی میکند، اما نیازی به استفاده از آن نیست. سایر کتابخانههایی که کلاس Print را به ارث میبرند (و بنابراین از printf پشتیبانی میکنند)، شامل کتابخانه LCD LiquidCrystal و کتابخانه LCD گرافیکی U8G2 هستند.
پین کردن ماکروها:
برای ارجاع به پینها، نیازی به استفاده از شماره پینهای دیجیتالی نیست. میتوانید از چند ماکرو از پیش تعریفشده استفاده کنید که “پینهای آردوینو” را به پورت و شماره پورت تبدیل میکنند:
1 2 3 4 5 6 7 8 9 10 |
// Use PIN_PB0 macro to refer to pin PB0 (Arduino pin 0 with the standard and sanguino pinout) digitalWrite(PIN_PB0, HIGH); // Results in the exact same compiled code digitalWrite(0, HIGH); |
PROGMEM با اندازه فلش بیشتر از 64 کیلوبایت
ویژگی PROGMEM برای ذخیره دادههای ثابت مانند آرایههای رشتهای در حافظه فلش استفاده میشود و برای حفظ RAM ارزشمند بسیار مفید است. با این حال، PROGMEM تنها دادهها را در بخش پایین حافظه فلش، یعنی بین 0 تا 64 کیلوبایت، ذخیره میکند. اگر میخواهید دادهها را در بخش بالایی حافظه فلش ذخیره کنید (در بازه 64 تا 128 کیلوبایت) و هدف شما ATmega1284/P است، میتوانید از PROGMEM1 استفاده کنید. دسترسی به این دادهها به همان سادگی PROGMEM نیست، اما همچنان امکانپذیر است:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
const char far_away[] PROGMEM1 = "Hello from far away!\n"; // (64 - 128kiB) void print_progmem() { char c; // Print out far_away for(uint8_t i = 0; i < sizeof(far_away); i++) { c = pgm_read_byte_far(pgm_get_far_address(far_away) + i); Serial.write(c); } } |
بسیار عالی بود. تشکر از زحمات شما
با سلام. ممنون از انرژی مثبت شما.