کالیبراسیون اسیلاتور میکروکنترلر AVR
در صورتی که از اسیلاتور داخلی میکروکنترلرهای avr استفاده میکنید. میتوانید رجیستر OSCCAL اسیلاتور را ابتدای شروع برنامه با مقدار صحیح بارگزاری کنید تا خطای فرکانس حداقل باشد.
برای این کار با استفاده از پروگرمر MKII و نرم افزار اتمل استودیو میتوانید مقدار صحیح کالیبراسیون اسیلاتور برای فرکانس مورد نظر را از ناحیه signature row بخوانید و در آدرسی دلخواه از اییپرام ذخیره کنید سپس ابتدای برنامه مقدار را از اییپرام داخل رجیستر کالیبراسیون اسیلاتور بارگزاری نمایید.
مانند:
1 | OSCCAL = eeprom_read_byte(0); |
اسیلاتور میکروکنترلر AVR (مدل های ATMEGA)
وظیفه تولید کلاک در میکروکنترلرها برعهده واحد نوسان ساز یا اسیلاتور میباشد. اسیلاتور از منابع مختلفی برای تولید فرکانس میتواند استفاده کند. وظیفه انتخاب منبع تولید کلاک، واحد مالتی پلکسر کلاک (Clock Multiplexer) میباشد، در میکروکنترلرهای AVR سری ATMEGA با استفاده از پروگرمر و تنظیم فیوزبیت ها، منبع تولید کلاک از طریق مالتی پلکسر تعیین میشود.
منابع تولید کلاک در AVR:
1- اسیلاتور RC کالیبره شده داخلی
2- اسیلاتور کریستالی فرکانس پایین خارجی
3- اسیلاتور کریستالی خارجی
4- اسیلاتور RC خارجی
5- کلاک خارجی
کلاک خروجی از مالتی پلکسر به عنوان سورس کلاک وارد واحد کنترل کلاک (AVR Clock Control Unit) شده سپس به بخش های مختلف میکروکنترلر مثل: تایمرها (Timer/Counter)، ماژول های ورودی خروجی یا پورت ها (General I/O Module)، مبدل آنالوگ به دیجیتال (ADC)، هسته پردازنده (CPU Core)، حافظه RAM و حافظه FLASH و EEPROM میشود.
یک منبع کلاک داخلی برای تایمر واچ داگ وجود دارد که مستقل از اسیلاتور میباشد و کلاک واچ داگ را تامین میکند.
کاهش مصرف توان
با استفاده از واحد کنترل کلاک میتوان کلاک واحدهایی از میکروکنترلر که مورد استفاده نیستند را قطع کرد، در این صورت آن واحد خاموش شده و انرژی مصرف نمیکند. این موضوع در پروژه هایی که با باتری کار میکنند به کاهش مصرف انرژی کمک زیادی میکند.
در واقع حالت های مدیریت توان و مدهای اسلیپ میکروکنترلرهای AVR با قطع کلاک واحد های مختلف میکرو باعث کاهش مصرف انرژی میشوند.
تنظیم منابع کلاک
با استفاده از فیوزبیت های CKSEL میتوان منبع کلاک ورودی به مالتی پلکسر را طبق جدول زیر تعیین کرد.
اسیلاتور کریستالی:
با اتصال کریستال به پایه های XTAL1 و XTAL2 وتنظیم فیوزبیت ها، اسیلاتور کلاک مورد نیاز را با استفاده از کریستال خارجی تامین میکند. در صورت پروگرم کردن فیوزبیت CKOPT دامنه کلاک تقویت میشود که کاربرد آن در محیط های با نویز بالا و یا به عنوان تامین کننده کلاک برای یک مصرف کننده خارجی از پایه XTAL2 استفاده میشود.
اسیلاتور در سه مد متفاوت برای بازه فرکانسی مختلف عمل میکند که طبق جدول زیر تنظیم میشود.
اسیلاتور کریستالی فرکانس پایین:
برای استفاده از کریستال ساعت با فرکانس 32.768 کیلوهرتز باید فیوزبیت های CKSEL با مقدار 1001 تنظیم شوند. در صورت پروگرم کردن فیوزبیت CKOPT خازن های داخلی روی پایه های XTAL1 و XTAL2 فعال میشود و نیازی به قرار دادن خازن های خارجی نیست.
اسیلاتور RC خارجی:
در کاربردهایی که حساسیت به کلاک وجود ندارد میتوان از اسیلاتور RC خارجی استفاده کرد. فرکانس از رابطه f=1/(3rc) قابل محاسبه میباشد. حداقل مقدار خازن استفاده شده 22 پیکو فاراد میباشد. در صورتی که فیوزبیت CKOPT پروگرم شود خازن داخلی با ظرفیت 36 پیکو فاراد فعال میشود و نیاز به خازن خارجی نیست.
اسیلاتور در چهار مد متفاوت میتواند عمل کند که هر کدام برای یک بازه فرکانسی بهینه شده اند. مدهای عملکرد با فیوزبیت های CKSEL طبق جدول زیر برای بازه های فرکانسی مختلف قابل انتخاب میباشند.
اسیلاتور RC داخلی کالیبره شده:
اسیلاتور RC داخلی کالیبره شده، در فرکانس های 1، 2، 4 و 8 مگاهرتز میتواند کار کند. تمام فرکانس ها برای ولتاژ 5 ولت و دمای 25 درجه سانتی گراد میباشند. زمانی که این حالت استفاده میشود فیوزبیت CKOPT باید غیرفعال شود.
کلاک خارجی:
منبع کلاک خارجی به پایه XTAL1 اعمال میشود برای انتخاب کلاک خارجی فیوزبیت های CKSEL باید در حالت 0000 پروگرم شوند.
زمانی که میکروکنترلر ریست میشود مقدر کالیبراسیون برای فرکانس 1 مگاهرتز به صورت اتومات از ناحیه signature row در رجیستر OSCCAL بارگذاری میشود. اگر از اسیلاتور RC داخلی با فرکانسی غیر از 1MHZ استفاده میکنید باید مقدار کالیبره را به صورت دستی انجام بدهید. ابتدا باید مقدار کالیبره را با استفاده از پروگرمر بخوانید و در آدرسی از حافظه FLASH یا EEPROM ذخیره کنید سپس در ابتدای برنامه مقدار را در رجیستر OSCCAL بارگذاری کنید. زمانی که مقدار OSCCAL صفر باشد حداقل محدوده فرکانسی انتخاب میشود و زمانی که مقداری غیر از صفر در رجیستر OSCCAL نوشته شود فرکانس افزایش پیدا میکند.