این واحد یکی از مهمترین قسمت های میکروکنترلرهای AVR  می باشد.  همانطور که قبلا نیز گفتیم این  واحد وظیفه تامین کلاک ورودی و پخش آن به تمامی واحد های میکروکنترلر را بر عهده دارد. شکل زیر بلوک دیاگرام این واحد را برای میکروکنترلر Atmega32 نشان می دهد. این واحد به کلی توسط فیوز بیت ها ( Fuse Bits ) تنظیم و کنترل می شود و در معماری AVR  برای تنظیم و کنترل این واحد رجیستر خاصی در نظر گرفته نشده است .

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

  • اسیلاتور RC ( خازن – مقاومت ) خارجی
  • کلاک خارجی
  • کریستال اسیلاتور خارجی
  • کریستال اسیلاتور فرکانس پایین خارجی
  • اسیلاتور RC داخلی

بعد از وارد شدن پالس کلاک به واحد کنترل کلاک ، تقسیمی از کلاک وارد شده به کلیه واحدهای میکرو کنترلر می رود. همانطور که در شکل نیز مشاهده می کنید ، پالس CLKCPU به هسته مرکزی ( CPU ) و SRAM اعمال می شود. پالس CLKADC ، کلاک لازم را جهت واحد مبدل  آنالوگ به دیجیتال فراهم می کند . پالس CLKFLASH کلاک لازم را بر ای حافظه Flash و eeprom داخلی فراهم می سازد. پالس CLK/IO برای تولید پالس ماژول های ورودی و خروجی نظیر USART ،SPI  ، شمارنده ها و وقفه ها بکار برده می شود. پالس CLKASY   برای راه اندازی آسنکرون تایمر یا کانتر  شماره  دو  ، برای استفاده از فرکانس 32768HZ  اسیلاتور RTC  است. در این شکل همچنین نحوه اتصال واحد تایمر Watchdog  نیز نشان داده شده است . تایمر سگ نگهبان از یک اسیلاتور مجزای داخلی استفاده می کند که پالس کلاک مورد نیاز  خود را تامین کرده و احتیاجی به منبع ورودی کلاک ندارد .

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

فیوز بیت ها قسمتی در حافظه فلش هستند که با تغییر آنها امکانات میکروکنترلر نظیر تنظیم منبع کلاک میکرو ، روشن و خاموش کردن امکان JTAG  و … را میتوان کنترل کرد . میکرو کنترلر های AVR  بسته به نوع قابلیتی که دارند دارای فیوز بیت های متفاوتی هستند . در میکروکنترلرهای AVR  حداکثر سه بایت برای این منظور در نظر گرفته می شود . توجه کنید که برنامه ریزی فیوزبیت ها باید قبل از قفل ( Lock )  تراشه  صورت گیرد . برای اینکه بدانید  میکروکنترلری که با آن کار می کنید دارای چه ویژگی و چه فیوز بیت هایی می باشد ، به قسمت System Clock & Clock Options  در Datasheet آن میکرو مراجعه نمایید.

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

میکروکنترلر ATMEGA32 دارای 2 بایت ( 16 بیت ) فیوز بیت ( Fuse Bit )  می باشد که 8  بیت کم ارزش آن Low Byte   و 8 بیت دیگر آن High Byte  نامگذاری شده است. در شکل زیر نام ، عملکرد و پیش فرض این فیوز بیت ها را مشاهده می کنید .

نکته :
در تمام جداول مربوط به فیوز بیت ها ، 0  به معنای بیت برنامه ریزی شده (PROGRAMMED)  و 1 به معنای بیت برنامه ریزی نشده (UNPROGRAMMED) می باشد.

در ادامه به معرفی و بررسی هر یک از فیوز بیت های فوق می پردازیم :

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

فیوز بیت CKOPT میتواند برای دو حالت مختلف استفاده شود . یعنی زمانی که محیط پر نویز باشد و زمانی  که از کریستال خارجی استفاده شود این بیت برنامه ریزی می شود (0) در بقیه حالت نیازی به برنامه ریزی این بیت نیست (1). همچنین فیوز بیت های CKSEL0 تا CKSEL3  برای تنظیم منبع کلاک میکرو می باشد و بسته به منبع ورودی کلاک به یکی از صورت های جدول زیر باید برنامه ریزی شود. فیوز بیت های SUT0 و SUT1 نیز زمان راه اندازی (Start-up) را در هنگام متصل کردن منبع تغذیه تعیین می کنند . که این زمان در هر یک از حالت های جدول زیر متفاوت است.

نوسان ساز با کریستال خارجی

برای استفاده از کریستال خارجی، باید فیوز بیت های CKSEL3.0  را بین 1010  تا 1111  برنامه ریزی کنیم . پایه های خارجی XTAL1 و XTAL2  طبق شکل زیر توسط دو خازن عدسی (خازن های بالانس) با مقادیر  یکسان به یک کریستال با فرکانس حداکثر تا 16 مگاهرتز متصل می گردند.

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

خازن های C1 و C2  را معمولا 22PF  انتخاب می کنند . وظیفه این خازن حذف نویز الکترومغناطیس اطراف  کریستال می باشد که طبق جدول فوق با توجه به کریستال استفاده شده تعیین می شوند. در طراحی PCB  برای حذف نویز، معمولا بدنه کریستال خارجی را به زمین وصل می کنند اما نباید بدنه کریستال حرارت بیند زیرا ممکن است به آن آسیب برسد.

هنگام استفاده از کریستال خارجی بهتر است با فعال کردن بیت CKOPT دامنه نوسان اسیلاتور را  حداکثر کرد. در این حالت اسیلاتور بصورت Rail-to-Rail  عمل می کند یعنی مثلا اگر تغذیه میکروکنترلر 5  ولت  باشد حداکثر دامنه پالس ساعت نیز 5 ولت خواهد بود. این حالت برای محیط های پر نویز مانند کا رخانه های صنعتی بسیار مناسب است. البته فعال کردن این فیوز بیت به اندازه چند میلی آمپر جریان مصرفی میکروکنترلر را افزایش می دهد .

نکته :
در میکروکنترلرهای بدون پسوند L  اگر بخواهیم از کریستال 16MHZ  استفاده کنیم باید فیوز بیت CKOPT   فعال گردد در غیر اینصورت حداکثر کریستال خارجی ممکن برای اتصال به میکرو 8MHZ   خواهد بود. 

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

نوسان ساز با کریستال فرکانس پائین

منظور از کریستال فرکانس پائین ، استفاده از کریستال ساعت ( 32768 هرتز ) می باشد . در صورتی که فیوز بیت های CKSEL 3.0  به صورت 1001  برنامه ریزی شوند  ، پالس ساعت سیستم از کریستال خارجی فرکانس پایین استفاه می کند. در این حالت اگر فیوز بیت CKOPT فعال شود خازن داخلی بین دو پایه XTAL1 و XTAL2  با زمین  فعال می گردد. با فعال شدن این خازن که مقدار آن 36pF  است ، احتیاجی  به قرار دادن خازن های C1 و C2 نیست و میتوان مستقیما این کریستال را روی دو پایه XTAL1 و XTAL2 نصب کرد. همچنین زمان Start-up مورد نیاز میکرو در این حالت ، طبق جدول زیر تعیین می شود.

نوسان ساز با RC خارجی

از اسیلاتور RC خارجی در کاربردهایی که به تغییرا ت زمان و فرکانس حساسیت نداشته باشیم استفاده می کنیم . در این حالت مدار زیر باید به میکرو متصل شود که در آن فرکانس نوسانات اسیلاتور از رابطه (F = 1 / 3RC ) بدست می آید و مقدار خازن C  حداقل باید 22pF  باشد .

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

در این حالت اگر فیوز بیت CKOPT  فعال شود خازن 36pF داخلی بین دو پایه XTAL1  و GND   فعال می گردد  و در نتیجه میتوان  مقدار 36pF  را در محاسبات لحاظ نمود ( C+36 ) یا حتی  میتوان  خازن C  خارجی را حذف نمود. همچنین زمان Start-up مورد نیاز میکرو در این حالت ، طبق جدول زیر تعیین می شود.

نوسان ساز با اسیلاتور RC کالیبره شده داخلی

اسیلاتور RC   کالیبره شده داخلی می تواند فرکانس های ثابت 1MHZ  ،2MHZ  ،4MHZ   و 8MHZ   را در  شرایط تغذیه +5v   و در دمای 25  درجه  ایجاد نماید. فرکانس کاری این اسیلاتور به شدت به ولتاژ تغذیه،  درجه حرارت محیط و مقدار بایت رجیستر OSSCAL  وابسته می باشد. از آنجایی که این نوع نوسان ساز به دما و ولتاژ وابسته است پیشنهاد می کنیم در موقع استفاده از تبادل سریال USART  و دیگر پروتکل ها و برنامه هایی که به زمان بسیار وابسته هستن د از کریستال خارجی استفاده کنید .

نکته :
فیوزبیت های میکروکنترلر ATmega32 به طور پیش فرض توسط کارخانه طوری تنظیم شده است که  از اسیلاتور کالیبره شده داخلی با فرکانس 1MHZ  استفاده می کند . 

زمانی که اسیلاتور داخلی استفاده می شود نیازی به قرار دادن اسیلاتور خارجی نیست و پایه های XTAL1 و XTAL2  آزاد گذاشته می شود و همچنین در این نوسان ساز، نباید فیوز بیت های CKOPT فعال باشد. مقدار فرکانس این اسیلاتور توسط فیوز بیت های CKSEL3.0 طبق جدول زیر تعیین می شود.

زمان Start-up میکرو نیز توسط فیوز بیت های SUT0 و SUT1 طبق جدول زیر تنظیم می گردد.

رجیستر کالیبراسیون OSCCAL

در صورت استفاده از اسیلاتور RC  کالیبره شده داخلی در هر بار که میکروکنترلر Reset   می شود ، مقدار رجیستر OSCCAL خوانده شده و اسیلاتور به طور خودکار تنظیم می گردد. در حالت پیش فرض مقدار این رجیستر طوری تنظیم شده است که اسیلاتور RC  روی 1  مگاهرتز کار کند. کاربرد این رجیستر برای کاهش

خطای اسیلاتور RC  داخلی در شرایط مختلف است اما اگر از شرایط تغذیه 5 ولت  و دمای 25درجه  استفاده  گردد این خطا به 10% کاهش می یابد. با نوشتن مقدا ر 0x00  کمترین و با نوشتن مقدار 0xFF  در این  رجیستر بیشترین فرکانس ممکن برای کالیبراسیون انتخاب می گردد. تنظیم دقیق این کالیبراسیون در  فرکانس های به جز 1  ،2  ،4  و 8 مگاهرتز خیلی تضمینی نیست . شکل زیر درصد تغییرات این رجیستر را در حالت تنظیم آن روی مقادیر مختلف نشان می دهد.

نوسان ساز با کلاک خارجی

در صورت تنظیم فیوز بیت های CKSEL3..0  به صورت ” 0000 “ میکروکنترلر AVR  پالس کلاک ورودی خود را از یک منبع خارجی دریافت می کند . در این حالت پایه XTAL2  بدون اتصال بوده و پایه XTAL1  به منبع تولید پالس دیجیتال متصل می شود. با فعال نمودن فیوز بیت CKOPT  نیز میتوان خازن 36 پیکوفارادی بین پایه XTAL1   با زمین را فعال کرد. نحوه اتصال کلاک خارجی به میکرو را در شکل زیر مشاهده می کنید.

در این حالت نیز فیوز بیت های SUT1 و SUT2 طبق جدول زیر می باشند.

تنظیم دیگر فیوز بیت ها

فیوز بیت EESAVE :  مقدار پیش فرض آن 1 بوده و برای اینکه آیا در هنگام پاک کردن ( Erase ) میکرو حافظه EEPROM پاک شود یا نه ، از این فیوز بیت استفاده می شود . اما زمانی که مقدار این بیت را صفر کنیم ، محتویات EEPROM در هنگام پاک کردن ( Erase ) میکرو حفظ می شود . این بیت بطور پیش فرض غیرفعال است.

فیوز بیت JTAGEN :  این فیوز بیت که به صورت پیش فرض در حالت برنامه ریزی شده می باشد ،برای فعال کردن ارتباط JTAG  می باشد . برنامه ریزی شدن این فیوز بیت در حالت پیش فرض باعث شده است تا پورت C برای ارتباط I/O  واحد ورودی/خروجی در دسترس نباشد .  برای آزاد کردن پورت C می بایست این فیوز بیت را از حالت برنامه ریزی خارج نمود .

فیوز بیت OCDEN (On Chip Debug Enable) : زمانیکه فیوز بیت ارتباط دهی JTAG  فعال شده باشد و همچنین برنامه میکروکنترلر را قفل نکرده باشیم می توان با فعال کردن فیوزبیت OCDEN برنامه میکروکنترلر را به طور آنلاین در حین اجرا توسط مدار واسطی که از ارتباط سریال JTAG  استفاده می کند توسط نرم افزار مشاهده کرد. به این نوع آنالیز امولاتور (Emulator)  یا شبیه  ساز سخت افزاری گفته می شود. همچنین برنامه ریزی شدن این بیت به قسمتهایی از میکرو امکان می دهد که در مدهای SLEEP  کار کنند.  درهر صورت فعال کردن این بیت مصرف توان میکرو کنترلر را افزایش می دهد. این بیت بصورت پیش فرض برنامه ریزی نشده (1) است.

فیوز بیت SPIEN : با فعال کردن این فیوز بیت می توان میکرو را از طریق ارتباط دهی سریال SPI برنامه ریزی کرد. این فیوز بیت بطور پیش فرض فعال است.

فیوز بیت های BOOTSZ0 و BOOTSZ1 : این دو بیت، مقدار حافظه اختصاص داده شده BOOT را طبق جدول زیر تعیین می کنند. در زمان برنامه ریزی شدن فیوز بیت BOOTRST اجرای برنامه از آدرس حافظه BOOT آغاز خواهد شد.

فیوزبیت BOOTRST : این بیت برای انتخاب بردار Reset است اگر غیر فعال باشد آدرس بردار RESET   از 0000 است و اگر این بیت فعال شود به آدرسی که فیوز بیت های BOOTSZ0  و BOOTSZ1  مشخص کرده اند تغییر می یابد.

فیوز بیت BODEN :  مدار BROWN-OUT   آشکارساز ولتاژ تغذیه است که اگر از 7/2  یا 4  ولت کمتر شود میکروکنترلر را ریست می کند. برای فعال کردن این مدار، باید فیوزبیت BODEN  فعال گردد. این فیوز بیت بطور پیش فرض غیرفعال است.

فیوز بیت BODLEVEL : اگر فیوزبیت BODEN فعال و فیوز بیت BODLEVEL  غیرفعال باشد با کاهش ولتاژ VCC  کمتر از 7/2 ولت میکروکنترلر ریست می شود اما اگر فیوز بیت BODLEVEL را فعال کنیم آنگاه با کاهش ولتاژ VCC  کمتر از 4 ولت میکروکنترلر ریست می شود.  مطاابق جدول زیر سطح ولتاژ BROWN-OUT تعیین می شود. فیوز بیت BODLEVEL  بصورت پیش فرض غیر فعال است.

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

بار دیگر به نرم افزار CodeVision بر می گردیم. در شکل زیر محیط Chip Programmer  و کاربرد قسمت های مختلف آن را برای تنظیمات Fuse Bits میکروکنترلر Atmega32 مشاهده می کنید . با تنظیم کردن این پنجره و سپس پروگرام کردن میکروکنترلر تغییرات مورد نظر در آن اعمال می شود . همچنین در شکل زیر تنظیمات فیوز بیت ها را در حالت default میکروکنترلر atmega32  در حالت 1Mhz  داخلی ( با پروگرامر Stk500 ) ، مشاهده می کنید. با تغییر این تیک ها میتوان فیوزبیت ها را برنامه ریزی نمود.

توجه :
تنها یکبار فیوزبیت ها را به طور صحیح برنامه ریزی کرده و سپس تیک گزینهProgram Fuse Bits  را بردارید تا احیانا و اشتباها آنها را تغییر ندهید.  اگر احیانا تغییر کرده باشد می توانید مجددا به صورت شکل زیر 1MHz  داخلی درآورید . 

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

فرض کنید فیوز بیت ها را طوری تنظیم کرده ایم که در حالت کریستال خارجی کار کند. در این صورت برای استفاده از کریستال خارجی در شبیه سازی با تایپ کردن عبارت crystal  ، آن را از کتابخانه انتخاب و به میکرو وصل می کنیم .  همچنین دو عدد خازن 22  یا 27 پیکوفاراد را نیز  به صورت شکل زیر متصل می نماییم . بعد از اتصال مدار روی کریستال دابل کلیک کرده و فرکانس کار آن را انتخاب می کنیم . در اینجا ما  فرکانس کریستال را 16 مگاهرتز فرض کردیم.

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