حتما تا به امروز بارها و بارها کلمه کلاک رو شنیدید. از اونجا که این مفهوم یکی از پایهایترین مفاهیم علوم مختلف از جمله الکترونیک و کامپیوتر هستش، لازمه که با اون آشنا باشیم. در این قسمت که بخش چهارم از آموزشهای مقدماتی AVR هست، ابتدا در مورد تعریف اون صحبت میکنیم؛ و در ادامه در مورد منابع کلاک در AVR که چندین نوع هستند برای شما عزیزان و دوستان توضیحات بیشتری ارائه خواهیم داد. همونطور که میدونید ما در این آموزشها از میکروکنترلر ATmega16 استفاده میکنیم. همراه ما باشید…
کلاک چیست؟
جسم انسان را در نظر بگیرید. این جسم تا زمانی زنده است که قلب انسان به تپش خود ادامه دهد. وقتی که ضربان قلب قطع شود، مرگ انسان حتمی است. برای یک کامپیوتر که دارای یک پردازنده مرکزی و یا یک میکروکنترلر است که یک cpu کوچک دارد، کلاک حکم ضربان قلب را دارد. یک cpu تا زمانی کار میکند که کلاک آن ادامه داشته باشد. ماهیت یک کلاک بصورت زیر است:
یک کلاک از بینهایت تک پالس ساخته شده است که مدت زمان هر تک پالس را با T که بیانگر دوره تناوب است، نشان میدهند. با توجه به رابطه فرکانس با دوره تناوب، هرچه T کمتر باشد فرکانس بیشتر میشود و برعکس.
فیوزبیت چیست؟
ATmega16 دارای قسمتی برای تنظیم کلاک مورد نیاز cpu است. این قسمت در بخش فیوزبیتها قرار دارد. اما فیوزبیت چیست؟ فیوزبیت قسمتی از حافظهی فلش AVR است که با قطع برق مقدار آن از بین نمیرود و کار اصلی آن کنترل قسمتی از سخت افزار داخلی AVR میباشد. فیوزبیت ها در هر مدل از AVR تفاوتهایی دارد، اما اکثر فیوزبیتها بین میکروکنترلرها مشترک هستند. نمای کلی فیوزبیتهای ATmega16 به شکل زیر است:
فیوزبیتها از نظر مهم بودن به سه دستهی فیوزبیت پایین، فیوزبیت بالا و فیوزبیتهای پیشرفته تقسیم میشوند. ذکر این نکته ضروری است که 0 بودن فیوزبیت به معنای فعال بودن و 1 بودن فیوزبیت به معنای غیرفعال بودن آن است.
منابع کلاک در AVR ATmega16
حال که با فیوزبیتها آشنا شدیم، برای تنظیم منابع کلاک باید از فیوزبیتهای CKSEL0 تا CKSEL3 استفاده کرد. منابع کلاک به طور کل به پنج دسته تقسیم میشوند که در شکل زیر نشان داده شده است.
با تنظیم کردن فیوزبیتهای CKSEL میتوان هر کدام از مدهای مد نظر را انتخاب کرد.
مد کلاک خارجی (External Clock)
اولین مورد از منابع کلاک در AVR که به اون خواهیم پرداخت، مد کلاک خارجی (External Clock) هست. در صورتی که مقادیر CKSEL0 تا CKSEL3 همگی برابر 0 باشند، کلاک سیستم بر روی External Clock یا همان کلاک خارجی تنظیم میشود. در این حالت مطابق شکل زیر باید یک کلاک بیرونی به میکرو اعمال گردد.
میکروکنترلر دو پایه XTAL1 و XTAL2 دارد که در این مد تنها باید کلاک را به XTAL1 اعمال کرد.
مد اسیلاتور RC داخلی (Calibrated Internal RC Oscillator)
دومین مورد از منابع کلاک در AVR ، اسیلاتور RC داخلی (Calibrated Internal RC Oscillator) میباشد. در صورتی که مقدار CKSEL بین 0001 تا 0100 انتخاب شود، اسیلاتور RC داخلی میکرو راهاندازی شده و کلاک به صورت داخلی تامین میشود. این مد 4 حالت متفاوت دارد که در جدول زیر آوردهایم.
اگر CKSEL برابر 0001 شود کلاک سیستم روی 1MHz و اگر 0100 انتخاب شود، کلاک بر روی 8MHz قرار میگیرد. در این مد به هیچ قطعهی خارجی احتیاج نیست و کلاک به صورت داخلی تولید میشود. همین موضوع سبب شده که کلاک تولیدی دقیق نباشد و ما را به استفاده از دیگر روشها تعقیب کند.
نکته: در حالت پیشفرض مقدار CKSEL برابر 0001 بوده و میکرو با فرکانس 1 مگاهرتز کار میکند.
مد اسیلاتور RC خارجی (External RC Oscillator)
و اما سومین مورد از منابع کلاک در AVR ، اسیلاتور RC خارجی (External RC Oscillator) میباشد. اگر بخواهیم فرکانس میکرو دقیقا آن چیزی باشد که ما میخواهیم، باید از مدار RC خارجی استفاده کرد و فیوزبیتها را در آن مد قرار داد. نحوهی اتصال خازن و مقاومت به میکرو مطابق شکل زیر میباشد.
خازن و مقاومت تشکیل یک مدار RC میدهند که تولید فرکانس میکند. مقدار این فرکانس از رابطه زیر به دست میآید.
در رابطه فوق R بر حسب اهم و C بر حسب فاراد در نظر گرفته میشود. دو نکته باید رعایت شود: اول اینکه مقدار خازن باید در حد پیکو فاراد انتخاب شود و حداقل باید 22 پیکو فاراد باشد. دوم اینکه بعد از مشخص شدن R و C و اتصال آن به میکرو باید CKSEL را بصورت زیر تنظیم کرد.
در حالت اسیلاتور RC خارجی چهار حالت امکانپذیر است که باید مطابق فرکانس نوسان مدار RC انتخاب شوند. به عنوان مثال اگر خازن برابر 36 پیکو فاراد و مقاومت 1 کیلواهم باشد، با استفاده از فرمول، فرکانس تقریبا 9.259 مگاهرتز به دست میآید. بنابراین باید CKSEL را برابر 1000 قرار داد تا فرکانس تولیدی در محدوده آن قرار گیرد.
نکته: مزیت این مد نسبت به سایر منابع کلاک در AVR ، این است که هر مقدار دلخواهی که در نظر داشته باشیم میتوانیم به وسیلهی مدار RC ایجاد کنیم.
مد کریستال خارجی (External Crystal)
در جلسات آینده و به خصوص در بخش تایمرها، ما به کلاکی احتیاج داریم که از دقت بسیار بالایی برخوردار باشد؛ در نتیجه نیاز است که با سومین منبع از منابع کلاک در AVR که «کریستال خارجی (External Crystal)» است، آشنا شویم. به عنوان مثال اگر منبع کلاک بصورت RC داخلی انتخاب شود و روی 8 مگاهرتز تنظیم شده باشد، در واقع دقیقا 8 مگ نیست؛ بلکه به دمای محیط و پارامترهای دیگری مثل ولتاژ تغذیه وابسته است. طبق تجربه، این مقدار بین 7.6 تا 8.5 مگاهرتز تغییر میکند. اما اگر بخواهیم کلاک مورد نظرمان از پایداری و دقت زیادی برخوردار باشد باید از کریستال خارجی استفاده کرد و آن را به صورت شکل زیر، به میکرو متصل نمود.
علاوه بر کریستال، بهتر است دو خازن C1 و C2 هم اضافه شوند تا در محیطهای نویزی فرکانس تولیدی پایدار بماند. در نهایت باید فیوزبیتهای CKSEL را به صورت زیر برنامهریزی نمود.
در جدول فوق تنها فیوزبیتهای CKSEL1 تا CKSEL3 اهمیت دارند و CKSEL0 تاثیری در انتخاب مُد ندارد. به عنوان مثال اگر از کریستال 4 مگاهرتز استفاده کنیم باید مقدار CKSEL برابر 1110 یا 1111 شود و یا اگر کریستال 2 مگاهرتز استفاده کنیم باید CKSEL را 1100 یا 1101 قرار دهیم.
نکته: فیوزبیت دیگری به نام CKOPT وجود دارد که پروگرام کردن آن (یعنی 0 کردن آن) باعث قرارگیری یک خازن داخلی 36 پیکو فاراد بین پایههای XTAL1 و XTAL2 میشود. در صورتی که این فیوزبیت پروگرام شود، باید فرکانس کریستال خارجی کمتر از 1 مگاهرتز انتخاب گردد.
مد کریستال خارجی فرکانس پایین (External low-Frequency Crystal)
در صورتی که CKSEL برابر 1001 شود، باید از کریستال فرکانس پایین 32.768KHz استفاده کرد. این کریستال که به عنوان آخرین مورد از منابع کلاک در AVR در مورد آن صحبت خواهیم کرد، به کریستال ساعت معروف است و خیلی کم پیش میآید که فرکانس کاری میکروکنترلر تا این حد پایین انتخاب شود. البته در بخش مربوط به تایمرکانتر 2 ما از این کریستال برای تولید پالس ساعت استفاده میکنیم.
در این بخش سعی کردیم به طور کامل و جامعی در مورد منابع کلاک در AVR مطالب رو خدمتتون ارائه بدیم. اگر سؤال یا مشکلی پیش اومد زیر همین پست کامنت بزارید تا تیم ما در کوتاهترین زمان ممکن به یاری شما بیاد 😄. همچنین میتونید سایر قسمتهای این آموزش رو از اینجا دنبال بکنید. تا آموزش بعدی خدانگهدار…
6 پاسخ
سلام رضا هستم آقای مهندس نصر عزیز باعرض پوزش اگر در ژنراتور رگلاتور نباشد ژنراتور کار میکند یا خیر لطفاً دلیل را هم بفرمایید خیلی متشکرم از لطف جنابتان
سلام بر شما. لطفا بیشتر توضیح بدید
سلام وقت بخیر
ببخشید من فیوزبیت دستکاری کردم و الان میکرو نمیشناسه، با پرواگرامر usbasp کار میکنم.
جوری میشه میکرو رو برگردوند
سلام. بستگی به این داره کدوم فیوزبیت تغییر کرده باشه. اگه فیوزبیت های CKSEL تغییر کرده باشن، یدونه کریستال به پایه های XTAL1 و XTAL2 وصل کنید.
ممنون مهندس عزیز انشا الله همیشه موفق و پیروز باشی
سلام مهندس وقت بخیر
من میخوام از یک کریستال خارجی 11.0592MHz به میکروکنترلر ATmega16A وصل کنم که میکروکنترلر هم دقیقا روی همین فرکانس کار بکنه.
میتونید راهنماییم کنید فیوز بیت هارو چگونه تنظیم کنم؟
با تشکر.