پنج شنبه , ۲ آذر ۱۳۹۶
آخرین نوشته‌ها
خانه | سیستم های نهفته | میکروکنترلر | دوره آموزشی AVR | فیوزبیت ها در AVR – (جلسه ۱۴)

فیوزبیت ها در AVR – (جلسه ۱۴)

یه سلام به داغی روزای پر حرارت مرداد ماه به کاربرای دوست داشتنی میکرولرن 😀

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

در این پست فیوز بیت های میکروکنترلر Atmega32 را که با ATmega16 یکسان است، توضیح می دهیم. با یادگیری فیوز بیت های این میکروکنترلر می توانید برای فیوز بیت های سایر میکروکنترلرهای AVR با استفاده از دیتا شیت تنظیمات را انجام دهید.

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

فیوز بیت ها بخشی از حافظه FLASH هستند که با برنامه ریزی آن ها یک سری امکانات خاص در اختیار کاربر قرار می گیرد. در AVR ها حداکثر ۳ بایت برای فیوز بیت ها در نظر گرفته شده است. که به ترتیب زیر هستند:

  1. بایت بالای فیوزبیت
  2. بایت پایین فیوزبیت
  3. فیوزبیت های توسعه یافته

دقت شود که فیوز بیت ها با erase کردن یا پاک کردن حافظه FLASH از بین نمی روند. تعداد و نام فیوز بیت ها در سری های مختلف AVR تقریبا با هم یکسان است.(البته با کمی تغییرات جزئی)

نکته ی مهم: در فیوز بیت ها “۰” به معنی برنامه ریزی شدن و “۱” به معنی برنامه ریزی نشدن فیوز بیت است.

فیوز بیت های ATmega32

در ATmega32 دو بایت برای فیوز بیت ها در نظر گرفته شده است که در جدول زیر آن ها را مشاهده می کنید:

فیوز بیت

۱) on-chip debug enable – OCDEN

از این فیوز بیت به همراه فیوز بیت JTAGEN برای دیباگ (debug) کردن چیپ استفاده می شود. در واقع می توانیم میکروکنترلر را در زمان اجرای کار سیستم به صورت real time دیباگ  یا اشکال زدایی کنیم. این بیت به صورت پیش فرض یک بوده و غیرفعال است. طبیعتا افرادی با این فیوز بیت کار می کنند که می خواهند وضعیت رجیسترهای داخلی را در زمان اجرای برنامه ببینند و برای حرفه ای ها در نظر گرفته شده. پس اگر کاربر حرفه ای نیستید یا نمی خواهید برای اشکال زدایی سیستم، وضعیت رجیستر ها را مشاهده کنید، این فیوز بیت را فعال نکنید.

۲) JTAG Enable – JTAGEN

یک رابط JTAG از پیش ساخته شده درون میکروکنترلر وجود دارد که با فعال کردن این بیت قابل استفاده است. این بیت به صورت پیش فرض صفر بوده که باعث فعال بودن JTAG می شود. همین امر باعث می شود بعضی بیت های پورت C در ATmega32 کار نکند. برای عملکرد عادی پورت C باید این بیت را غیر فعال کنید. JTAG یک رابط برای تست و برنامه ریزی IC های دیجیتال که طبق استاندارد IEEE 1149.1 مورد استفاده قرار می گیرد.

۳) SPI Enable – SPIEN

صفر بودن این بیت به معنی این است که امکان پروگرم کردن AVR به صورت سریال وجود دارد. اگر یک پروگرمر موازی ندارید هرگز این بیت را یک (غیرفعال) نکنید، چرا که دیگر به صورت سریال قابل پروگرم کردن نخواهد بود. توصیه می شود مقدار پیش فرض این بیت را تغییر ندهید.

۴) EEPROM Save – EESAVE

اگر این بیت فعال باشد، در طی عملیات erase(پاک) کردن کردن میکروکنترلر با پروگرامر، حافظه EEPROM به همراه حافظه فلش پاک نخواهد شد. تغییر دادن این بیت به نیاز شما بستگی دارد.

۵) BOOTSZ1 و BOOTSZ0

از این فیوز بیت ها برای تنظیم سایز حافظه Boot  استفاده می شود. حافظه برنامه از نوع flash بوده و به دو قسمت کاربردی و Boot تقسیم می شود(برخی AVR ها فقط حافظه کاربردی دارند). نکته مثبتی که در حافظه Boot وجود دارد، امکان تغییر برنامه قرار داده شده روی حافظه است. یعنی فقط از طریق پروگرام کردن نیست که می توان برنامه حافظه را عوض کرد. مثلا می توان از طریق پورت سریال و به وسیله کامپیوتر اطلاعاتی را برای AVR فرستاد و بدون وجود پروگرامر قسمتی از برنامه را عوض کرد.

در جلسات آینده حتما درباره Boot به طور کامل توضیح خواهیم داد. فعلا برای آشنایی جزئی به جدول زیر که مقادیر مختلف این فیوز بیت و حجم حافظه Boot را نشان می دهد توجه کنید:

boot loader

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

۶) BOOTRST

با پروگرم شدن این بیت، وقتی میکروکنترلر ریست شود به آدرس بلوک بوت لودر پرش خواهد کرد. در صورتی ک با حافظه بوت کار نمی کنید مقدار پیش فرض را تغییر ندهید.

۷) [CKSEL[3-0

با این بیت ها می توان حالت های مختلف منبع کلاک (تولید پالس) ورودی AVR را تنظیم کرد. در جدول زیر مشاهده می کنید که چند حالت برای منبع کلاک میکروکنترلر وجود دارد.

clock pulse

در جدول بالا مهم ترین حالت هایی که اغلب با آن ها کار می کنیم کریستال خارجی و نوسان ساز RC داخل است؛ پس به توضیح موارد فوق می پردازیم.

نوسان ساز RC داخلی

میکروکنترلر AVR دارای ۴ حالت نوسان ساز RC داخلی است و مقدار پیش فرض آن فرکانس ۱MHz است. به جدول زیر دقت کنید:

internal-clock

کریستال خارجی

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

  • فرکانس پایین: فرکانس های کمتر از ۳ مگاهرتز را شامل می شود.
  • فرکانس متوسط: محدود ۳ تا ۸ مگاهرتز فرکانس متوسط گفته می شود.
  • فرکانس بالا:بالاتر از ۸ مگاهرتز هم جزء فرکانس های بالا دسته بندی می شود.

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

۸) CKOPT

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

۹) Brown-out Detection – BODEN

میکروکنترلر ATmega32 به صورت داخلی دارای یک مدار برای تشخیص میزان ولتاژ VCC است. این مدار بر اساس یک حد آستانه عمل می کند و با فعال شدن این فیوز بیت اگر VCC از آن آستانه کمتر شود باعث ریست شدن میکروکنترلر خواهد شد. وقتی که VCC به بالاتر از حد آستانه برگردد میکروکنترلر دوباره شروع به کار خواهد کرد. برای فعال شدن این مدار باید فیوز بیت BODEN صفر شود.

۱۰) BODLEVEL

حد آستانه برای BOD توسط این فیوز بیت تعیین می شود. زمانی که این فیوز بیت پروگرم شود سطح آستانه ۴ ولت بوده و زمانی که پروگرم نشود ۲٫۷ ولت می باشد.

۱۱) SUT1 و SUT0

به وسیله این فیوز بیت ها start-up time برای شروع به کار میکروکنترلر تعیین می شود. این زمان فاصله بین اتصال تغذیه تا شروع به کار میکروکنترلر است و برای پایدار شدن خروجی نوسان ساز لازم است، چرا که ممکن است نوسان ساز در زمان اتصال تغذیه دقیقا همان فرکانس مطلوب را تولید نکند وعملا با تنظیم یک زمان طولانی تر فرصت پایدار شدن به نوسان ساز داده می شود. برای کاربردهای معمولی توصیه می شود با مقادیر پیش فرض کار کنید و این فیوز بیت ها را تغییر ندهید.

جلسه امروز را به این هدف براتون قرار دادم تا بچه هایی که تازه با AVR دارن کار میکنن دید خوبی از فیوز بیت ها به دست بیارند و این تصور که کار کردن باهاشون پیجیده هست از بین بره. البته اگه بخوام تمام بحث فیوز بیت ها را اینجا توضیح بدم امکانش نیست چون خیلی مفصل میشه. برای همین بهتون توصیه می کنم، الان که متوجه شدید فیوز بیت ها چیه و نکات مهمش را یاد گرفتید حتما دیتا شیت ATmega32 را باز کنید و برید سراغ بخش فیوز بیت ها و جزئیات بیشتر را اونجا مطالعه کنید. در ادامه در مورد نحوه پروگرم کردن AVR، رابط JTAG و … صحبت می کنیم. پس بازم به ما سر بزنید. حرف آخر: ما رو به دوستاتون معرفی کنید و با لینک شبکه های اجتماعی که همین زیر وجود داره  مقاله های میکرولرن را به اشتراک بگذارید. دوستتون دارم 😉

درباره‌ی احسان

کارشناس الکترونیک و کارشناس ارشد مخابرات سیستم | زمینه ی تحقیقاتی : هوش مصنوعی و شبکه های عصبی عمیق (CNN)، پردازش تصویر و ویدیو، تعقیب اشیا متحرک |‌برنامه نویس میکروکنترلرهای AVR و ARM و بردهای رزبری پای | مسلط به زبان های برنامه نویسی C و Python

۱۳ ديدگاه

  1. با عرض سلام و خسته نباشید و تشکر بابات سایت مفیدتون
    یه سوالی داشتم و سوالم اینه که در مورد atmega 16 که حداکثر تا فرکانس ۲۰ مگا هرتز فرکانس قابل تحملشه آیا میتونیم کریستال ۲۴ مگا هرتزی خارجی بهش وصل کنیم و از تقسیم فرکانسی در مد ctc تایمر یک بهره ببریم؟؟در واقع آیا با این تقسیم فرکانسی فرکانس کلاک سی پی یو هم همون مقدار میشه یا صرفا فرکانس تایمر تغییر میکنه؟؟
    پیشاپیش از زحمات شما کمال تشکر را دارم…

    • درود به شما دوست گرامی
      در حالتی که شما می‌فرمایید فقط کلاک یک از واحدهای میکروکنترلر که الان تایمر هست کاهش پیدا میکنه ولی خود cpu داره با فرکانس اصلی کار میکنه. پس دارید ۲۴ مگ بهش اعمال می کنید. این کار به نوعی باعث over clock شدن میشه و توصیه نمیشه. شما همیش سعی کنید بیشتر از ۱۲ یا نهایتا ۱۶ مگاهرتز به avr اعمال نکنید چون دیگه خیلی از عملکردهای دلخواهتون دقیقا منطبق با دیتا شیت نمیشه و خطاهای ناخواسته ی زیادی میبینید. اگه نیاز به فرکانس های بالاتر دارید برید سراغ رزبری و با خیال راحت ازش استفاده کنید.

      • خیلی خیلی ممنونم .واقعا نمیدونم به چه زبونی تشکر کنم.سوال دیگه ای که داشتم اینه که من یه برنامه واسه اندازه گرفتن یه ثانیه با تایمر یک نوشتم و با شبیه سازی هم تست کردم کاملا همه چی درست و دقیق بود و فرکانسمو هم ۸ مگا هرتز در نظر گرفتم منتها تو عمل چون کمی خطا داشت کریستال ۸ مگا هرتز گذاشتم و فیوز بیت ها رو هم تنظیم کردم اما نمیدونم که چرا به جای یک ثانیه دوثانیه اندازه میگیره در واقعا انگار به جای اینکه با فرکلنس ۸ مگ کریستال کار کنه داره با فرکانس ۴ مگ کار میکنه در حالی که کد من همون کد قبلیه ممنون میشم راهنماییم کنید.پیشاپیش از زحمات شما کمال تشکر را دارم
        آرایش فیوز بیتا:
        CKSEL3,2,1,0=1111 و SUT10=10 و CKOPT=1
        ضمنا برای کریستال هم خازن ۲۲ پیگو فارادی استفاده کردم.

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

  3. بهترین مرجع و کتاب برای ساخت رادیو کنترل چیست

  4. سلام
    مبخواستم بپرسم که پین های ain0,ain1که مربوز به مقایسه کننده انالوگ هستند چکاری دقیقا انجام میدن و همچنین پین های tosc1 مربوط به واحد rtc اصلا rtcچی هست؟یه توضیح مختصر بدین ممنون میشم.

    • سلام به شما
      دو پین ain0 و ain1 که شما گفتید. خودتونم جواب دادید دیگه. واحدی به نام مقایسه کننده آنالوگ داخل میکروکنترلر هست که شما می تونید یک سطح آستانه برای میکرو در نظر بگیرید و دو ولتاژ آنالوگ را با هم مقایسه کنید و در صورت رخ دادن حالت های مختلف، اقدام خاصی کنید.
      سوال دومتون هم باز بهش اشاره کردید. rtc یعنی real time clock و معناش اینه که شما می تونید به پین های tosc1 و tosc2 یک کریستال خارجی با مقدار۳۲٫۷۶۸ کیلو هرتز وصل کنید و از تایمر ۲ به عنوان یک ساعت واقعی که زمان را محاسبه می کنه استفاده کنید. برای اطلاع بیشتر دیتا شیت ATmega32 را باز کنید و قسمت تایمر ۲ را مطالعه کنید.

  5. سلام
    میخواستم بپرسم من فیوز بیت ها رو تغییر ندادم و این طور که شما گفتید فرکانس روی یک مگا هست ولی بعد از debug برنامم سمت چپ بغل رجیسترا میزنه ۴مگابایت این چی هست؟
    موارد استفاده xtal1,2 برایrc خارجی هست؟
    ویه سوال دیگ این که بخوام فرکانسمو روی ۸ مگابایت تنظیم کنم کدوم قسمت برنامه باید فیوز بیت ها رو تغییر بدم؟
    در ضمن برنامه هم avr studio هست.
    ممنون

    • با سلام
      من پیشنهاد می کنم این پست را یک بار دیگه و با دقت بیشتری بخونید. قطعا سوال هاتون جواب داده میشه. اما برای سوال هاتون راهنمایی میکنم. اگه شما به فیوز بیت ها دست نزنید به صورت پیش فرض روی ۱MHz داخلی هست. اون چیزی که توی دیباگ می بینید رو نمی تونم دربارش نظر بدم مگه اینکه یه عکس(اسکرین شات) از دسکتاپتون بفرستید تا ببینم .
      فرکانس ۸ مگ جزء فرکانس های متوسط هست و مثلا در در نرم افزار progisp به راحتی می تونید از medium frequncy که اشاره به این رنج فرکانسی داره استفاده کنید. نکته ی دیگه اینکه اصلا داخل برنامه شما کاری به فیوز بیت ندارید. فیوز بیت مربوط به مرحله پروگرام کردن و با استفاده از نرم افزار پروگرامر هست.
      عکس رو می تونید به اکانت تلگرام من به این آدرس بفرستید تا بررسی کنم:
      https://telegram.me/EhsanAo

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

    • سلام به شما دوست عزیز
      اگه در قسمت پروژه های کاربردی توجه کنید کم کم داره تعداد پروژه ها بیشتر میشه و در آینده هم تعداد پروژه های آموزشی بیشتر از قبل خواهد شد تا بتونه نیاز دوستان را پاسخ بده.

پاسخ دهید

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

Time limit is exhausted. Please reload CAPTCHA.