آموزش کامل پروگرام کد های آردوینو روی ATMEGA8

تبدیل ATMEGA8 به آردوینو
نوشته شده توسط

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

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


شرح آموزش

بطور کلی در این روش، ابتدا توسط یک بورد آردوینو بوت لودر مربوط را برروی ATMEGA8ریخته و بعد از انجام تنظیماتی در نرم افزار، توسط یک مبدل سریال میکروکنترلر ATMEGA8 را از این پس میتوانیم پروگرام کنیم. به این نکته توجه داشته باشید که این آموزش برای میکروکنترلر های سری ATMEGA8 (ATMEG8, 48, 88, 168, 328) مورد استفاده می‌باشد. من در این آموزش از بورد Arduino UNO و ATMEGA8 استفاده کرده ام.

در تصویر زیر مشخصات پایه های میکروکنترلر را ملاحظه میکنید. به این نکته توجه کنید که وقتی در محیط برنامه نویسی آردوینو مثلا دستور “(HIGH, 8)digitalWrite” را مینویسیم، منظور  این است پایه شماره 8 دیجتال، فعال یا یک منطقی شود. این پایه برروی برد آردوینو مشخص شده است. اما روی آیسی اتمگا 8 مد نظر ما پس از ریختن بوت لودر در این آموزش، منظور پایه 14 آیسی خواهد پس به این نکته مهم توجه کنید.

Arduino ATMEGA8 Pinout
مشخصات پایه آردوینو ATMEGA8

برای اینکه فریمور آردوینو رو روی اتمگا 8 آپلود کنیم، در اولین مرتبه، نیاز به یک پروگرامر (مانند USB ASP) داریم یا یک برد آردوینو (مانند UNO).


وسایل مورد نیاز

ATMEGA8

Arduino UNO

مبدل USB به سریال

برد بورد


شماتیک

با استفاده از شماتیک زیر اتصالات بین بورد آردوینو و ATMEGA8 را برقرار نمایید.

شماتیک
شماتیک

بهتر است بین پایه 20 آیسی ATMEGA8 و GND یک خازن با ظرفیت 10 میکرو فاراد وصل نمایید.

مدار مونتاژ شده
مدار مونتاژ شده

نصب بوت لودر

بعد از بستن مدار بالا، به مرحله کد نویسی خواهیم رفت. در مرحله اول از این لینک سورس کد مربوطه را دانلود کرده و در نرم افزار آردوینو آن را باز کنید. در این مرحله قصد داریم تا بوت لودر را بر روی ATMEGA8 پروگرام کنید.

بعد از باز کردن سورس کد (optiloader.ino)، حتما در بخش ابتدایی برنامه define های مربوطه را بررسی کنید و متناسب با نوع بورد آردوینو خود و نحوه سیم بندی شماتیک خود در صورت نیاز آن را تغییر دهید. مثلا اگر در این آموزش پایه ریست میکرو را به پایه دیجیتال 10 بورد ARDUNI UNO متصل کردیم پس باید در سورس نیز 10 باشد که البته همین هست. یا مثلا برای بورد آردوینو مگا 2560 باید سه قسمت SCK، MOSI و MISO را متناسب با شماره پایه های مربوط به آن تغییر دهید. ولی ریست را به هر کدام از پایه که وصل کردیم همان را مینویسم مثلا پایه 10.

ریختن بوت لودر آردوینو روی اتمگا 8
سورس کد

بعد از طی مراحل بالا و انتخاب شماره پورت و نوع بورد خود، برنامه را روی آردوینو آپلود کرده و تا موقعی که “Done Uploading” نمایش داده شود صبر می‌کنیم. بعد از انجام این مرحله و موفقیت آمیز بودن آپلود برنامه، سریال مانیتور آردوینو را باز کنید.

در ابتدا باودریت سریال مانیتور را روی “19200” تنظیم نموده و یکبار دکمه ریست آردوینو را بزنید. بعد از این کار اطلاعاتی را مانند تصویر زیر در سریال مانیتور مشاهده خواهید کرد که نشان دهنده این است که بوت لودر روی اتمگا 8 با موفقیت نصب شده است.

برای اطمینان در سریال مانیتور یک بار حرف “G” را تایپ و اینتر مینزنیم و مجدد نتیجه را بررسی می‌کنیم. یا اگر خواستید برروی یک  ATMEGA8 دیگر نیز بوت لودر  نصب کنید، میتوانید آن را جایگزین ATMEGA8 فعلی کنید و حرف “G” را ارسال کرده و منتظر بمانید تا بودت لودر روی آن پروگرام شود.

ریختن بوت لودر آردوینو روی اتمگا 8
اطلاعات خروجی

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

در مرحله قبل، بوت لودر را روی ATMEGA8 نصب کردیم .بعد از انجام این مرحله، شما میتوانید برنامه مورد نظر خود را مثلا برنامه LED چشمک زن ساده آردوینو را روی میکروکنترلر ATMEGA8 پروگرام کنیم. پس طبق مراحل زیر عمل کنید.


مرحله اول: تنظیمات نرم افزار Arduino IDE


در اولین گام به منوی Files > Preferences وارد شوید. و در مکان مشخص شده لینک زیر را کپی و پیست کرده و برروی OK بزنید.

https://mcudude.github.io/MiniCore/package_MCUdude_MiniCore_index.json

اضافه کردن لینک دانلود پکیج minicore
اضافه کردن لینک دانلود پکیج minicore

حالا از منوی Tools > Board > Boards Manage را کلیک کنید، در ابتدا از اتصال به اینتنرت مطمئن شوید. در پنجره نمایش داده شده عبارت “minicore” را سرچ کنید. طبق تصویر زیر روی گزینه install بزنید و منتظر بمونید تا نصب پکیج بصورت کامل انجام شود.

دانلود پکیج minicore
دانلود پکیج minicore

طبق توضحیات ارائه شده، این پکیج مناسب برای آیسی های ATMEGA328, 168, 48, 88, 8 می‌باشد.

بعد از انجام این مرحله وارد منوی Tools > Boards شده و از بین بورد های موجود با اسکرول کردن به پایین در قسمت MiniCore، آیسی مورد نظر را برای پروگرام کردن انتخاب کنید. که ما در این مطلب چون از ATMEGA8 استفاده میکنیم پس همین مورد را انتخاب خواهیم کرد.

انتخاب آیسی از MiniCore
انتخاب آیسی از MiniCore

بعد از انتخاب ATMEGA8، مجدد به منوی Tools مراجعه میکنیم . طبق تصویر زیر مشاهده میکنید که چند قسمت جدید به این منو اضافه شده است که در ادامه آنها را بررسی خواهیم کرد.

انتخاب آیسی از MiniCore

از بخش Clock می‌توانیم مشخص کنیم از چه روشی کلاک پالس میکروکنترلر را تامین می‌کنیم. مثلا داخلی با فرکانس 1MHz یا خارجی با فرکانس 16MHz و … . (شخصا خواستم بدون کریستال خارجی هم تست کنم یعنی کریستال خارجی وصل نکنم و از اسیلاتور داخلی میکرو استفاده کنم، اما این کار ممکن نبود.)

بخش BOD مربوط به تنظیمات فیوز بیت BOD هست که مشخص میکنه چه زمانی میکرو ریست شود. مثلا اگر 2.7V انتخاب کنیم وقتی ولتاژ ورودی کمتر از این مقدار باشه میکرو ریست خواهد شد. یا اگر 4V رو انتخاب کردیم، اگر ولتاژ ورودی کمتر از 4 ولت بود میکرو را ریست خواهد شد.

بخش Compile LTO می‌توانیم انتخاب کنیم که عمل پروگرام کردن سریع تر باشد یا خیر. اگر Disable که بصورت پیشفرض همین مورد انتخاب شده است را انتخاب کنید، عمل پروگرام کردن مدت زمان بیشتری نسبت به حالت Enable خواهد داشت. Enable برای زمانی است که بخواهیم سریع تر عمل پروگرام انجام شود.


مرحله دوم: تنظیمات و فراهم کردن سخت افزار


برای انجام عمل پروگرام کردن ابتدا طبق جدول زیر اتصلات را برقرار کنید.

ATMEGA8 مبدل USB به سریال
Reset CTR
TX RX
RX TX
VCC VCC
GND GND

مدار مونتاژ شده:

مدار مونتاژ شده برای انجام پروگرام
مدار مونتاژ شده برای انجام پروگرام

نکته عملی: در صورتی که مبدل سریال شما دارای DTR باشد، بین پایه DTR مبدل سریال و پایه ریست اتمگا، از مدار زیر استفاده کنید.

ریختن بوت لودر آردوینو روی اتمگا 8
شماتیک

همچنین نحوه اتصال کریستال 16MHz مشابه مراحل قبل (طبق بخش “شماتیک”) می‌باشد و بهتر است بین پایه 20 آیسی ATMEGA8 و GND یک خازن با ظرفیت 10 میکرو فاراد وصل کنید.

نکته عملی و خیلی مهم:
اگر مبدل سریال شما پایه DTR ندارد، در مدار تصویر بالا، خازن 100nF را حذف کنید. و هنگام آپلود کد یک لحظه پایه RESET میکروکنترلر را بصورت دستی به GND وصل کنید (پین دیگر مقاومت 10K). برای اینکار میتونید از یک پوش باتن استفاده کنید و یک طرف را به پایه ریست میکرو و طرف دیگه اش رو هم به زمین وصل کنید. 

برای انجام این مورد چه بصورت دستی و چه از طریق کلید فشاری، هنگامی که در محیط نرم افزار آردوینو گزینه آپلود را بزنید برنامه شروع به Compile شده و عبارت مربوطه نمایش داده خواهد شد. بعد از طی مرحله Compile وارد مرحله Uploading خواهید شد. درست در همین موقع و بلافاصله بعد از نمایش عبارت Uploading دقیقا در همین زمان، یک لحظه کوتاه پایه ریست میکرو را به GND وصل کنید یا پوش باتنی را که اضافه کرده اید را فشار دهید. در نهایت منتظر بمونید تا برنامه به درستی و کامل پروگرام شود.

بعد از اعمال تنظیمات مد نظر، مبدل سریال را به پورت USB و مدار مونتاژ شده وصل کنید. و در نرم افزار آردوینو از منوی Tools وارد قسمت Com شوید. پورتی که مبدل وصل است را انتخاب کنید. سپس برنامه زیر را در Arduino IDE بنویسید:

void setup() 
{
  pinMode(13, OUTPUT);
}

void loop() 
{
  digitalWrite(13, HIGH);   
  delay(1000);                       
  digitalWrite(13, LOW);    
  delay(1000);                      
}

بعد از نوشتن برنامه فوق، ابتدا یک LED بین پایه 13 دیجیتال (پایه شماره 19 میکروکنترلر ATMEGA8) وصل نمایید. طبق توضیحات بخش قبلی (مرحله اول) شروع به انجام تنظیماتِ انتخاب آیسی از منوی Boards و پروگرام کردن میکروکنترلر خواهیم کرد.

در نهایت با بررسی مجدد تنظیمات و شماره پورت مربوطه، دکمه آپلود در نرم افزار آردوینو (Ctrl + U) را میزنیم. با این کار عمل پروگرام آغاز خواهد شود. چناچه مبدل شما دارای پایه DTR می‌باشد و بین پایه ریست و DTR خازن قرار ندهید، برنامه پروگرام نخواهد شد و ارور دریافت خواهید کرد.

در نهایت با آپلود کامل برنامه بر روی میکروکنترلر، مشاهده خواهید کرد که LED متصل به پایه دیجیتال 13، هر یک ثانیه چشمک خواهد زد.

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

امیدوارم از این آموزش کمال بهره را برده باشید. در صورتی که هرگونه نظر یا سوال داشتید درباره این آموزش لطفا اون رو در انتهای همین صفحه در قسمت دیدگاه ها قرار بدید. در کوتاه ترین زمان ممکن به اون ها پاسخ خواهم داد. اگر این مطلب براتون مفید بود، اون رو حتما به اشتراک بگذارید. همینطور میتونید این آموزش را پس از اجرای عملی توی اینستاگرام با هشتگ microelecom# به اشتراک بگذارید و پیج مایکروالکام (microelecom@) رو هم منشن کنید.

 


۲۰ دیدگاه برای “آموزش کامل پروگرام کد های آردوینو روی ATMEGA8

  1. سلام ممنون از مطالب مفیدتون یه سوال خیلی خیلی مهم داشتم من زمانی که از بعضی از کتاب خانه های اردینو استفاده می کنم برای مگا۸ ارور میده وخروجی کد هگز برای مگا۸ نمیده میشه لطف کنید بگید علت ارور چیه و چه جوری می شود مشکل حل کردواگز مشکل کم بود جا چه جوری می شود حجم کد هگز کم کرد تشکر

    1. سلام، خواهش می‌کنم. در خصوص ارور باید هر کدوم را ببینید چی هست و از توضحیات یا عنوان اروری که مشاهده شده اون رو رفع کرد. احتمال خیلی زیاد مشکل از کد هایی هست که نوشتید و دستوراتی که از اون کتابخانه استفاده می‌کنند.
      در مورد کاهش حجم هگز که فضای کمتری اشغال کنه باید عرض کنم اینکار نیاز به بهینه کردن کد ها و یکسری تمهیدات داره که برنامه نویس باید رعایت کنه و با تمرین و تکرار بدست میاد البته میتونید روش هایی هم که در اینترنت هست را سرچ بفرمایید.
      موفق باشید.

  2. بله فکر کنم برای من اتوماتیک ویندوز نصب می کرد و کار نمی کرد و بعد رفتم نسخه دیگر را دانلود کردم و درست شد

    1. سلام
      بله، فقط هنگام انتخاب میکروکنترلر از منوی Boards حتما میکرو مد نظر خودتون رو انتخاب کنید

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

    1. سلام، از اینکه تجربتون را با من و سایر مخاطب ها به اشتراک می‌گذارید تشکر می‌کنم.
      فقط یه نکته، درایور اون مبدل سریال رو میفرمایید حذف بشه و مجددا یه ورژن دیگه اش نصب بشه یعنی؟

  4. سلام ممنون از توضیحاتتون.
    دو سوال داشتم از خدمتتون ،یکی اینکه میتونیم پروگرامر isp رو در تنظیمات برنامه اصلی خودمون انتخاب کنیم و دیگه بدون نیاز به بوت لودر فایل هگز رو با پروگرامر آپلود کنیم؟
    یعنی میکرو میتونه بدون بوت لودر این برنامه رو اجرا کنه؟ و سوال دومم اینه که آیا برنامه ای که در آردوئینو نوشته شده به نظرتون در استفاده در محصول تجاری دچار مشکل میشه؟ تشکر از زمانی که میزارید

    1. سلام؛
      ۱- بله میتونید بدون در نظر گرفتن یا استفاده از بوت لودر، میکرو رو پروگرام کنید. میتونید مستقیما کد هگز را از برنامه گرفته و میکرو رو از طریق پروگرامر و نرم افزار پروگرام کنید. مثلا با استفاده از STK500. با بعضی از پروگرامر ها هم میشه مستقیما از داخل نرم افزار آردوینو میکرو رو پرواگرم کرد.

      ۲- برنامه نوشته در محیط های برنامه نویسی صرفا یکسری کد هست که طبق یک الگوریتم مشخص توسط برنامه نویس و یا توسعه دهنده نوشته میشن. در این بین برنامه نویس باید بیاد جوری کد بزنه که حداقل فضا و امکانات از میکرو اشغال بشه. التبه محیط برنامه نویسی و اینکه چه کامپایلری هم استفاده شده هم مهم هست.
      اینکه یسری میگن آردوینو اسباب بازیه و بدرد نمیخوره صرفا یکسری حرف متعصبانه است و پایه علمی نداره از نظر من. برد های آردوینو باعث شده تا با کوتاه ترین زمان به نتیجه مد نظر برسیم. در بحث های تجاری علاوه بر مواردی که عرض کردم چیز های دیگه ای هم هست. مثل طراحی اصولی برد که نویز پذیریش به حداقل برسه و مصونیت داشته باشه. علاوه بر این سایر چیز های دیگه ام در تجاری سازی و تولید انبوه هم وجود دارد.

      1. خیلی ممنونم از توضیحتون
        فقط در حالتی که بخوایم با فایل هگز میکرو رو پروگرم کنیم دیگه نیازی به بوت لودر نیست؟

        1. سلام؛
          خواهش می‌کنم. خیر نیازی نیست. میتونید این کار رو انجام بدید. وقتی که خروجی هگز از اردوینو میگیرید ۲ تا بهتون کد هگز میده، یکی با بوت لودر یکی بدون بوت لودر. شما متناسب با نیاز خودتون یکیش رو انتخاب و پروگرام کنید.
          موفق باشید.

  5. سلام و تشکر بابت آموزش خوبتان
    می خواستم بدانم اگر بعد از نصب بوت لودر بخواهیم بوت لودر را از روی میکرو حذف کنیم باید چکار کنیم؟

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

    1. سلام روز بخیر
      شما وقتی که کد هگز را بگیری و مستقیم روی میکرو پروگرام کنی مشکلی نداره بالاخره شما توی یه محیط دیگه برنامه نویسی کردی و نهایتا میکرو رو پروگرام میکنی و میتونی ازش استفاده کنی.
      فکر میکنم منظور شما این بوده که از کتابخانه های آردوینو میتونیم توی کامپایلر دیگه مثلا کدویژن استفاده کنیم که باید بگم بله میتونی ولی باید حتما تبدیل بشه بشه به زبان C که قابل فهم کدویژن باشه و باید مقداری روش کار بشه تا درست و بصورت کاملا صحیح تبدیل کنید و استفاده کنید ازش.

    1. سلام دوست عزیز؛
      خوشحال ام از اینکه این مطلب تونسته مفید واقع بشه برات. خواهش میکنم. اگر سوال یا نکته ای هم مد نظرت بود توی همین دیدگاه ریپلای کن

  6. خیلی خوب بود.
    دنبال یه روش راحت بودم از این روش که شما آموزش دادید استفاده کردم. بدون مشکل پروگرام شد و دارم استفاده میکنم از میکروکنترلر اتمگا ۸ ام در پروژه. برای میکروکنترلر های اتماگا ۱۶ یا ۳۲ هم میشه استفاده کرد؟

    1. سلام دوست عزیز
      خوشحالم که این مطلب مفید بوده براتون. در خصوص میکرو های اتمگا ۱۶ و یا ۳۲ که گفتید، از این آموزش نمیشه استفاده کرد!
      اما روند کار به همین صورت هست و باید از پکیج mightycore استفاده بشه. بزودی سر فرصت آموزش این مورد هم قرار خواهم داد.
      ممنون از اینکه مطالب را دنبال میکنید.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *