فیوزبیت ها در AVR
برای تازه کارها استفاده از فیوز بیت کمی گیج کننده است اما واقعا اینطور نیست. همان طور که از بحث پورت های وردی و خروجی در جلسه ی ده به یاد دارید می توانستیم یک پورت را با صفر و یک کردن یک بیت در رجیستر DDR ورودی یا خروجی کنیم. کار کردن با فیوز بیت ها هم چیزی جز صفر و یک کردن یک بیت در رجیستری خاص نیست. اما نکته ی مهم آن است که این بیت ها عملیات اصلی میکروکنترلر را تحت تاثیر قرار می دهند. در ضمن برای تغییر دادن آن ها نیاز به برنامه نویسی نبوده و می توان با استفاده از پروگرامر فیوز بیت ها را تغییر داد.
فیوز بیت ها بخشی از حافظه FLASH هستند که با برنامه ریزی آن ها یک سری امکانات خاص در اختیار کاربر قرار می گیرد. در AVR ها حداکثر ۳ بایت برای فیوز بیت ها در نظر گرفته شده است. که به ترتیب زیر هستند:
- بایت بالای فیوزبیت
- بایت پایین فیوزبیت
- فیوزبیت های توسعه یافته
دقت شود که فیوز بیت ها با 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 را نشان می دهد توجه کنید:
اگر قرار نیست با حافظه بوت کار کنید مقادیر فیوز بیت های این بخش را تغییر ندهید.
۶) BOOTRST
با پروگرم شدن این بیت، وقتی میکروکنترلر ریست شود به آدرس بلوک بوت لودر پرش خواهد کرد. در صورتی ک با حافظه بوت کار نمی کنید مقدار پیش فرض را تغییر ندهید.
۷) [CKSEL[3-0
با این بیت ها می توان حالت های مختلف منبع کلاک (تولید پالس) ورودی AVR را تنظیم کرد. در جدول زیر مشاهده می کنید که چند حالت برای منبع کلاک میکروکنترلر وجود دارد.
در جدول بالا مهم ترین حالت هایی که اغلب با آن ها کار می کنیم کریستال خارجی و نوسان ساز RC داخل است؛ پس به توضیح موارد فوق می پردازیم.
نوسان ساز RC داخلی
میکروکنترلر AVR دارای ۴ حالت نوسان ساز RC داخلی است و مقدار پیش فرض آن فرکانس ۱MHz است. به جدول زیر دقت کنید:
کریستال خارجی
کریستال خارجی مقادیر متفاوتی دارد. اگر به بازار سری زده باشید از مقادیری مانند ۱MHz تا ۱۶MHz و کلا رنج های مختلفی را می توانید پیدا کنید. اما باید فیوز بیت ها را در محدوده ی فرکانس کریستال خارجی تعیین کنید تا در عملکرد میکروکنترلر مشکلی پیش نیاید. برای این که فیوز بیت ها را صحیح انتخاب کنید در نرم افزار پروگرامر خود باید فقط تعیین کنید که فرکانس کم، متوسط یا زیاد است. اما هر کدام از این فرکانس ها چه محدوده ای را شامل می شوند:
- فرکانس پایین: فرکانس های کمتر از ۳ مگاهرتز را شامل می شود.
- فرکانس متوسط: محدود ۳ تا ۸ مگاهرتز فرکانس متوسط گفته می شود.
- فرکانس بالا:بالاتر از ۸ مگاهرتز هم جزء فرکانس های بالا دسته بندی می شود.
برای تنظیم کردن کریستال خارجی فقط کافی است که در پروگرامر خود محدوده را تعیین کنید. البته در جلسات بعدی به طور مفصل درباره انتخاب منبع پالس و پروگرم کردن میکرو صحبت خواهد شد.
۸) CKOPT
این بیت بین دو حالت مختلف تقویت کننده اسیلاتور یکی را انتخاب می کند. وقتی که این بیت پروگرم شود باعث ایجاد دامنه بیشتری برای نوسان ساز خواهد شد و در صورت غیرفعال شدن دامنه را کاهش می دهد. اگر از کریستال خارجی استفاده می کنید بهتر است که این فیوز بیت را فعال کنید تا نویزپذیری کمتر شود اما دقت کنید که با فعال کردن این بیت توان مصرفی بیشتر خواهد شد.
۹) Brown-out Detection – BODEN
میکروکنترلر ATmega32 به صورت داخلی دارای یک مدار برای تشخیص میزان ولتاژ VCC است. این مدار بر اساس یک حد آستانه عمل می کند و با فعال شدن این فیوز بیت اگر VCC از آن آستانه کمتر شود باعث ریست شدن میکروکنترلر خواهد شد. وقتی که VCC به بالاتر از حد آستانه برگردد میکروکنترلر دوباره شروع به کار خواهد کرد. برای فعال شدن این مدار باید فیوز بیت BODEN صفر شود.
۱۰) BODLEVEL
حد آستانه برای BOD توسط این فیوز بیت تعیین می شود. زمانی که این فیوز بیت پروگرم شود سطح آستانه ۴ ولت بوده و زمانی که پروگرم نشود ۲٫۷ ولت می باشد.
۱۱) SUT1 و SUT0
به وسیله این فیوز بیت ها start-up time برای شروع به کار میکروکنترلر تعیین می شود. این زمان فاصله بین اتصال تغذیه تا شروع به کار میکروکنترلر است و برای پایدار شدن خروجی نوسان ساز لازم است، چرا که ممکن است نوسان ساز در زمان اتصال تغذیه دقیقا همان فرکانس مطلوب را تولید نکند وعملا با تنظیم یک زمان طولانی تر فرصت پایدار شدن به نوسان ساز داده می شود. برای کاربردهای معمولی توصیه می شود با مقادیر پیش فرض کار کنید و این فیوز بیت ها را تغییر ندهید.
بیشتر بخوانید:
کتاب مقدمه ای بر زبان اسمبلی میکروهای avr
معرفی بهترین شبیه ساز های آردوینو