مدار نویسنده – روشن شدن خروجی ها با قابلیت تنظیم
اکتبر 10, 2017
راه اندازی ماژول اثر انگشت SM630 توسط Atmega8 ساخت سیستم امنیتی
آگوست 8, 2017
نمایش همه

تنظیم فیوز بیت در میکروکنترلرهای AVR

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

فیوز بیت چیست؟

همانطور که می دانیم میکروکنترلرهای AVR در کل دارای سه نوع حافظه می باشد: حافظه FLASH که همان حافظه ای است که کد برنامه نویسی در این حافظه قرار می گیرد، حافظه SRAM برای متغیر ران تایم استفاده می شود و EEPROM که حافظه ای است که داده هایی که باید هنگام خاموش شدن میکرو نباید پاک شوند در این حافظه قرار می گیرد. اکنون حافظه جدیدی معرفی می شود که به هر دوی fuse/lock بیت ها اطلاق می شود. این حافظه تعداد بیت های محدودی را شامل می شود که شامل Low Byte و High Byte می باشد.

دقت کنیم که وقتی یک بیت را به مقدار “0” تنظیم می کنیم به معنی برنامه ریزی شدن آن بوده (programmed) و زمانی که یک بیت را به مقدار “1” تنظیم می کنیم به معنی برنامه ریزی نشدن (un-programmed) آن بیت می باشد.

در طول این آموزش مثال هایی از Atmega32/16 بیان می شود ولی این آموزش کلی بوده و معمولا برای سایر میکروهای AVR نیز کاربرد دارد. برای کاربرد دقیق می توان به دیتاشیت میکرو مراجعه کرد.

در واقع این فیوز بیت است که تعیین می کند میکرو دارای بوت لودر است یا نه، سرعت میکرو، ولتاژ کاری میکرو و … .

مثال زیر را در نظر می گیریم. در مثال زیر فیوزبیت های High و Low نشان داده شده است.

 

مقدار فیوز بیت برای میکرو کنترلر Atmega32/32A به طور پیش فرض 0x99E1 است که همانطور که از شکل فوق مشخص است برای فیوز بیت های High مقدار 0x99 و برای فیوز بیت های Low مقدار 0xE1 است. این مقادیر به معنی فرکانس 1MHz و اسیلاتور داخلی RC و  statup time برابر با 6CK+64ms است.

توضیحات مربوط به تنظیم فیوز بیت ها

  • CKSEL[3:0] (Clock Select)

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

  • CKOPT (Clock Option)

دو نوع مد اسیلیشن در Atmega16 وجود دارد که بیت CKOPT  یکی از این دو حالت را انتخاب می کند. اگر این بیت پروگرام شده باشد (0)، اسیلاتور خروجی با سویینگ (Swing) rail to rail ایجاد می کند این حالت رنج فرکانسی وسیعی دارد. اگر CKOPT پروگرام نشود (1) اسیلاتور خروجی سویینگ کوچکتری خواهد داشت. جدول های زیر به خوبی محدوده فرکانس ها را نمایش می دهند.

*این مد فقط برای رزوناتور سرامیکی به کار می رود.

برای CKOPT = 0 بیت های CKSEL[3:1] به صورت زیر انتخاب می شوند.

برای کریستال خارجی با فرکانس 12MHz، مقدار CKSEL[3:1] به عدد 111 تنظیم می شود.

  • SUT[1:0] (Start Up Time)

این بیت برای زمان شروع Atmega16 به کار می رود. SUT[1:0] به همراه بیت CKSEL0 برای مشخص کردن زمان استارت آپ استفاده می شود.

  • BODLEVEL

سطح تریگر BOD(Brown Out Detection) توسط این فیوز بیت انتخاب می شود. وقتی “0” باشد سطح تریگر 4V و وقتی “1” باشد سطح تریگر 2.7V انتخاب می شود.

  • BODEN

Atmega16 واحد BOD دارد که به صورت دائم سطح Vcc را با سطح تریگر ثابت مقایسه می کند. این فیوز بیت برای فعال یا غیر فعال کردن BOD به کار می رود. برای فعال کردن واحد BOD باید فیوز بیت BODEN مقدار “0” شود.

  • OCDEN (On Chip Debugging Enable)

این بیت برای فعال یا غیرفعال کردن دیباگ چیپ به کار می رود. در واقع برای دنبال کردن برنامه قدم به قدم روی سخت افزار کاربرد دارد. برای فعال کردن  On Chip Debuggin مقدار این بیت باید “0” باشد.

  • JTAGEN (JTAG Enable)

در Atmega16 واحد داخلی JTAG قرار دارد که به طور پیش فرض در میکرو فعال می باشد. برای غیرفعال کردن JTAG باید این بیت برابر با “1” شود.

دقت شود اگر از پورت C میکروکنترلر به عنوان I/O استفاده شود باید این بیت به مقدار “1” تغییر یابد.

  • SPIEN (SPI Enable)

اگر مقدار این بیت برابر با “0” برنامه ریزی شود پروگرام کردن از طریق SPI برای میکرو فعال می شود.

  • BOOTRST (Boot Loader Reset)

بوت لودر یک برنامه کوچک است که در بخش خاصی از حافظه FLASH نوشته می شود. این برنامه در زمان بوت شدن میکرو انجام می شود. اگر این فیوز بیت پروگرام (0) شود بیانگر وجود برنامه بوت لودر بوده و برنامه به ابتدای آدرس بوت لودر پرش می کند.

  • BOOTSZ[1:0]

این فیوز بیت برای نشان دادن میزان حافظه بوت لودر استفاده می شود. مقدار پیش فرض برای این فیوز بیت ها “00” است که بیانگر سایز بوت لودر برابر با 1024 کلمه یا word می باشد.

  • EESAVE (EEPROM Save)

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

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

این مطلب را به اشتراک بگذارید

2 دیدگاه ها

  1. رحیم گفت:

    من که متوجه نشدمبه طور مثال cksel0یکبار باckoptاستفاده شده و بار دوم با sut استفاده شده اصلا واضح نیست توضیحات خیلی کمه

    • مدیرسایت گفت:

      با سلام
      دوست عزیز توضیحات در حد نیاز می باشد. اگر دقت کنید CKOPT = 0 با بیت های CKSEL[3:1] یعنی CKSEL1 تا CKSEL3 استفاده شده است و SUT[1:0] با CKSEL0 به کار رفته است.
      با تشکر

پاسخ دهید

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

*